乐闻世界logo
搜索文章和话题

docker-compose中的ports和expose有什么区别?

3 个月前提问
3 个月前修改
浏览次数35

1个答案

1

在Docker Compose中,portsexpose是两个用于网络配置的常见指令,它们在容器的网络连接和可访问性方面发挥着不同的作用。

ports

ports指令用于将容器内部的端口映射到宿主机上的端口。这使得外部网络(包括宿主机及其外部设备)可以通过宿主机的端口访问到容器中运行的服务。例如,如果你有一个Web应用程序在容器的80端口上运行,你可以使用ports将此端口映射到宿主机的8080端口上,使得可以通过访问宿主机的8080端口来访问应用。

例子:

yaml
services: webapp: image: webapp:latest ports: - "8080:80"

在这个例子中,容器内部的80端口映射到了宿主机的8080端口上。

expose

expose指令用于指示容器应该开放哪些端口以供其他容器连接。它不会将端口映射到宿主机上,因此使用expose暴露的端口只能被同一Docker网络中的其他容器所访问,而无法从外部网络访问。

例子:

yaml
services: db: image: postgres:latest expose: - "5432"

这个例子中,数据库服务db在5432端口对同一Docker网络中的其他服务开放,但这个端口不会映射到宿主机上,也不会从外部网络直接访问。

总结

简而言之,ports用于端口映射(容器到宿主机),使得服务可以从外部网络访问。而expose仅用于在同一Docker网络中的容器之间声明开放端口,不涉及端口映射,其目的是增加容器间的互操作性。在实际应用中,根据服务的需要和安全性考虑选择适当的指令非常重要。

2024年8月10日 00:35 回复

你的答案