Docker端口映射(
-p <host-port>:<container-port>
)适用于哪个容器接口?
在阅读了Docker文档之后,我不确定(1)和(2)之类的Docker端口映射适用于Docker容器中的哪些网络接口。
默认情况下,将创建一个具有两个接口eth0
和lo
的新容器,但可以添加更多接口。
(1)是-p 0.0.0.0:8080:80
的简写。
(2)指IP地址为192.168.1.100
的主机上的网络接口,它将主机端口8080
映射到容器端口80
,但是在哪个容器接口上?
(1) -p 8080:80 Map TCP port 80 in the container to port 8080 on the Docker host.
(2) -p 192.168.1.100:8080:80 Map TCP port 80 in the container to port 8080 on the Docker host for connections to host IP 192.168.1.100.
(1)和(2)是否将主机端口8080
映射到所有容器接口(80
)上的容器端口0.0.0.0
?如果可以,那么我在文档中哪里可以看到,并且可以将这种行为限制为一组特定的容器接口吗?
https://docs.docker.com/config/containers/container-networking/
答案 0 :(得分:1)
TCP连接具有单个起点(IP +端口)和单个终点(IP +端口)。因此,端口转发只能映射到容器中的一个 IP地址。具体来说就是网桥网络接口。
“这种行为是否可以限制在一组特定的容器接口上”真的没有意义,然后:根据TCP的性质,只有一个接口要连接。
如果您担心容器中侦听127.0.0.1的内容会公开,那么请不要;他们不会(也不能)。
https://pythonspeed.com/articles/docker-connection-refused/上有一堆图,可能会使其更清楚。
答案 1 :(得分:-1)
执行(1)和(2)将主机端口8080映射到所有容器接口(0.0.0.0)上的容器端口80
不完全是。 (1)将主机端口8080映射到所有 host 接口上的容器端口80。 (2)将IP地址为192.168.1.100的 host 接口上的主机端口8080映射到容器端口80。
具体来说,它会做一些事情(从我的机器上复制):
iptables -t nat -A PREROUTING -m addrypte --dst-type LOCAL -j DOCKER
iptables -t nat -A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER
iptables -t nat -A DOCKER ! -i <bridge docker interface> -p tcp -m tcp --dport 8080 -j DNAT --to-destination <container-IP-address>
在net:PREROUTING中,dport 8080的流量被重定向到容器IP地址。
我相信您似乎很困惑,并假设容器具有多个接口。容器通常具有一个接口,并连接到一个泊坞窗网络。