繁体   English   中英

docker-compose 网络和发布端口

[英]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:8080172.18.0.2:8080客户端,以及位于172.17.0.1:8080的 docker0 网络上的客户端
  • API 在172.18.0.1:3000172.18.0.3:8080和 docker0 网络上的172.17.0.1:3000

1)为什么我发布端口时可以通过docker0网络访问客户端和api?

2) 为什么我可以通过172.17.0.1172.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文件中的名称(如clientapi作为主机名,连接实际服务器进程正在侦听的(未映射)端口。 在此功能和您从发布端口获得的内容之间,您实际上并不需要直接知道容器专用 IP 地址。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM