如何从另一个主机Y(而不是主机Y中的容器)与主机X中正在运行的Docker容器通信

如何从另一个主机Y(而不是主机Y中的容器)与主机X中正在运行的Docker容器通信,docker,docker-compose,docker-swarm,docker-machine,Docker,Docker Compose,Docker Swarm,Docker Machine,我正在试验Docker网络,我设置了一个场景,如下所示 在通过网络连接的host-X中安装docker(host-X IP:60.0.0.28),并运行ubuntu操作系统的基本docker容器(docker容器仅连接到默认docker网桥网络,即172.17.0.0/16和172.17.0.2为容器IP)。现在,正在尝试在没有安装docker的同一网络(host-Y IP:60.0.0.40)中与另一个host-Y的正在运行的容器进行通信 我在host-Y中添加了基本路由,如“ip路由添加17

我正在试验Docker网络,我设置了一个场景,如下所示

在通过网络连接的host-X中安装docker(host-X IP:60.0.0.28),并运行ubuntu操作系统的基本docker容器(docker容器仅连接到默认docker网桥网络,即172.17.0.0/16和172.17.0.2为容器IP)。现在,正在尝试在没有安装docker的同一网络(host-Y IP:60.0.0.40)中与另一个host-Y的正在运行的容器进行通信

我在host-Y中添加了基本路由,如“ip路由添加172.17.0.0/16 via 60.0.0.28 dev ens3”


从容器中,我可以ping主机-Y&相反,我只能ping主机-Y的docker网关“172.17.0.1”,但无法到达容器。

假设您希望在主机X上启动docker nginx

你会跑:

docker run --detach -p 8080:80 nginx

然后您可以使用
http://60.0.0.28:8080

假设您希望在主机X上启动停靠的nginx

你会跑:

docker run --detach -p 8080:80 nginx

然后您可以使用
http://60.0.0.28:8080

在很多情况下,Docker内部IP地址都是无用的;从不同的主机呼叫就是其中之一。作为实现细节,您应该完全忽略这些

如果您将Docker从图中移除,并直接在主机上运行该进程,那么这应该很简单:从主机Y,您可以根据其DNS名称和服务器运行的端口调用主机X上的进程

hostY$ curl http://hostX:12345/
如果进程实际上在Docker容器中运行,则需要确保已使用已发布的端口启动容器。这不一定需要匹配进程正在侦听的端口

hostX$ docker run -p 12345:12345 imagename
完成此操作后,可以通过主机的DNS名称或IP地址以及发布的端口访问该进程,与使用非容器服务器的方式相同


在正常情况下,您不需要考虑Docker内部IP地址;您不需要手动
ip
路由设置命令,也不应该
docker inspect
docker run--ip
来查找或设置此详细信息。

在很多情况下,docker内部ip地址都是无用的;从不同的主机呼叫就是其中之一。作为实现细节,您应该完全忽略这些

如果您将Docker从图中移除,并直接在主机上运行该进程,那么这应该很简单:从主机Y,您可以根据其DNS名称和服务器运行的端口调用主机X上的进程

hostY$ curl http://hostX:12345/
如果进程实际上在Docker容器中运行,则需要确保已使用已发布的端口启动容器。这不一定需要匹配进程正在侦听的端口

hostX$ docker run -p 12345:12345 imagename
完成此操作后,可以通过主机的DNS名称或IP地址以及发布的端口访问该进程,与使用非容器服务器的方式相同


在正常情况下,您不需要考虑Docker内部IP地址;您不需要像您显示的那样手动
ip
路由设置命令,也不应该
docker inspect
docker run--ip
来查找或设置此详细信息。

如果您试图通过容器ip从容器网络外部与容器通信,则很可能是您做错了什么。您尝试执行的预期解决方案是将容器端口发布到主机端口。有关已发布端口的更多详细信息,请参阅。如果您试图通过容器ip从容器网络外部与容器通信,则很可能是您做错了什么。您尝试执行的预期解决方案是将容器端口发布到主机端口。有关已发布端口的更多详细信息,请参阅。感谢Kanrad,它帮助从外部主机与容器通信。但我想知道的是,我们是否可以从其他主机直接与容器IP通信,或者这种情况是不可能的???感谢Kanrad,它帮助我们从外部主机与容器通信。但我想知道的是,我们是否可以从其他主机直接与容器IP通信,或者这种情况是不可能的???感谢@David Maze的详细解释,我对这个docker-networking非常了解。感谢@David Maze的详细解释,我对docker网络有很好的了解。