繁体   English   中英

Docker 端口映射(`-p<host-port> :<container-port> `) 适用于?

[英]What container interface(s) does Docker port mapping (`-p <host-port>:<container-port>`) apply to?

Docker 端口映射 ( -p <host-port>:<container-port> ) 适用于哪个容器接口?

阅读 Docker 文档后,我不确定 Docker 容器中的哪些网络接口(1)和(2)等 Docker 端口映射适用于。

默认情况下,会创建一个具有两个接口eth0lo的新容器,但可以添加更多接口。

(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映射到所有容器接口 ( 0.0.0.0 ) 上的容器端口80 如果,那么我在哪里可以在文档中看到这一点,并且可以将此行为限制为一组特定的容器接口吗?

https://docs.docker.com/config/containers/container-networking/

TCP 连接有一个起点(IP+端口)和一个终点(IP+端口)。 因此,端口转发只能映射到容器中的一个IP 地址。 具体来说,桥接网络接口。

“可以将此行为限制为一组特定的容器接口吗”并没有真正意义,那么:根据 TCP 的性质,只有一个接口正在连接。

如果您担心在容器内侦听 127.0.0.1 的内容会公开,那么请不要; 他们不会(也不能)。

https://pythonspeed.com/articles/docker-connection-refused/有一堆图表可以让这更清楚。

在所有容器接口 (0.0.0.0) 上执行 (1) 和 (2) 将主机端口 8080 映射到容器端口 80

不完全是。 (1) 在所有主机接口上将主机端口 8080 映射到容器端口 80。 (2)主机接口上的主机8080端口映射IP地址192.168.1.100到容器的端口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 地址。

我相信您似乎很困惑并假设容器有多个接口。 容器(通常)有一个接口并连接到一个 docker 网络。

暂无
暂无

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

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