![](/img/trans.png)
[英]Docker-Compose publishing ports on Host computer Nodejs + Express
[英]docker-compose networking and publishing ports
我试图更好地理解 docker 网络,但我对以下内容感到困惑:
我通过docker-compose
(client, api) 启动了 2 个包含。 当我这样做时,会创建一个新网络myapp_default
,并且每个容器都加入这个网络。 该网络是桥接网络,位于172.18.0.1
。 客户端位于172.18.0.2
,api 位于172.18.0.3
。
我现在可以在172.18.0.2:8080
访问客户端,在172.18.0.2:8080
访问172.18.0.3:3000
这完全有道理。 当我在 docker-compose 中发布端口时,我很困惑:客户端上的 8080:8080 和 api 上的 3000:3000。
现在我可以从以下位置访问容器:
172.18.0.1:8080
、 172.18.0.2:8080
客户端,以及位于172.17.0.1:8080
的 docker0 网络上的客户端172.18.0.1:3000
、 172.18.0.3:8080
和 docker0 网络上的172.17.0.1:3000
1)为什么我发布端口时可以通过docker0网络访问客户端和api?
2) 为什么我可以通过172.17.0.1
和172.18.0.1
连接到容器?
您只能访问容器专用 IP 地址,因为您与 Docker 守护程序位于同一本地 Linux 主机上。 这在任何其他环境(不同的主机、MacOS 或 Windows 主机、Docker 位于 VM 中的 Docker 工具箱等环境)中都不起作用,甚至使用docker inspect
查找这些 IP 地址通常也不是最佳实践。
当您发布端口时,它们可以在主机上的这些端口上访问。 这确实适用于所有环境(在 Docker Toolbox 中,“主机”是 VM)并且是从 Docker 空间外部访问容器的推荐方式。 除非您绑定到特定地址,否则可以在每个主机接口和每个主机 IP 地址上访问容器; 这包括使用 Docker 桥接网络创建的人工 172.17.0.1等。
发布端口是 Docker 所做的其他与网络相关的设置的补充; 它不会阻止您通过其他路径到达容器。
如果还没有,您还应该阅读 Docker 文档中的 Compose中的网络。 无论您是否发布端口,您都可以使用docker-compose.yml
文件中的名称(如client
和api
作为主机名,连接实际服务器进程正在侦听的(未映射)端口。 在此功能和您从发布端口获得的内容之间,您实际上并不需要直接知道容器专用 IP 地址。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.