我想了解在docker中公开端口是如何在内部工作的,也就是说,我想知道在主机上使用了哪些接口。让我们考虑三种情况:
(1)
docker run -p 80:80 nginx(2)码头群的dokcer-compose:
....
services:
ports:
published: 80
target: 80
....请不要在这种情况下我们使用overlay网络。(3)码头群的dokcer-compose:
....
services:
ports:
published: 80
target: 80
mode: host
....首先,让我们强调一个事实,即它依赖于容器中包含的进程,它选择绑定哪个接口。但是,它在宿主中的绑定位置呢?我是说哪个接口(lo,eth0..)是否选择作为绑定的接口?
在分界性中,(2)和(3)方法有什么区别?
编辑
让我们考虑第四种情况:
(4)
`dokcer-compose:` for *docker swarm*
....
services:
s1:
ports:
published: 1234
target: 1234
mode: host
networks:
n1
s2:
ports:
published: 1234
target: 1234
mode: host
networks:
n1
networks:
n1:
driver: overlay其中s1和s2被迫部署在不同的节点上(使用约束)。现在,让我们假设s1与s2对话,s2使用端口1234与s1对话,并且:
(1)服务的IP地址(或服务名称) (2)主机的IP地址(物理地址)。
请告诉我,如果(1)或(2)覆盖网络n1被使用。请注意,这两个服务都连接在这个网络中。
发布于 2018-06-28 09:10:14
你应该在文件上清楚地得到答案。
https://docs.docker.com/engine/swarm/services/#publish-a-services-ports-directly-on-the-swarm-node
在你的情况下(2)
services:
ports:
published: 80
target: 80 如果您有3个节点N1,N2,N3,那么在这3个节点中的任何一个上按80都可以将您带到应用程序,即使它只是部署在一个节点N3上。
在Case (3)中
services:
ports:
published: 80
target: 80
mode: host由于该服务仅部署在N3上,因此您只能在N3上访问80,因此N1和N2不会在端口80上响应。
https://stackoverflow.com/questions/51065996
复制相似问题