我正在努力更好地理解对接者网络,但我对以下内容感到困惑:
我通过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.3:3000访问api --这是完全合理的。当我在客户端上发布端口: 8080:8080,在api上发布3000:3000端口时,我感到困惑。
现在我可以从以下位置访问这些容器:
172.18.0.1:8080,172.18.0.2:8080,和docker0网络上的172.17.0.1:8080172.18.0.1:3000,172.18.0.3:8080和172.17.0.1:3000的docker0网络上的API1)当我发布端口时,为什么我可以通过docker0网络访问客户机和api?
2)为什么我可以通过172.17.0.1和172.18.0.1连接到容器?
发布于 2019-12-08 12:26:15
您只能访问容器私有IP地址,因为您与Docker守护进程位于同一个本地Linux主机上。这在任何其他环境(不同的主机、MacOS或Windows主机,以及Docker之类的环境中,Docker都在VM中)不起作用,甚至使用docker inspect查找这些IP地址也不是最佳实践。
当您发布端口时,它们可以在这些端口的主机上访问。这在每个环境中都有效(在Docker中,“主机”是VM),也是从Docker外部空间访问容器的推荐方法。除非绑定到特定地址,否则容器可以在每个主机接口和每个主机IP地址上访问;这包括使用Docker桥网络创建的人工172.17.0.1等。
发布端口是在其他与网络相关的安装Docker的基础上进行的;它不会阻止您通过其他路径到达容器。
如果还没有,还应该在Docker文档中阅读网络写作。无论是否发布端口,都可以使用docker-compose.yml文件中的名称(如client和api )作为主机名,连接实际服务器进程侦听的(未映射的)端口。在此功能与发布端口的功能之间,您实际上并不需要直接了解容器私有IP地址。
https://stackoverflow.com/questions/59227870
复制相似问题