【发布时间】:2020-02-10 10:59:08
【问题描述】:
Docker 端口映射 (
-p <host-port>:<container-port>) 适用于哪个容器接口?
阅读 Docker 文档后,我不确定 Docker 容器中的哪个网络接口(如(1)和(2))适用于 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 映射到所有容器接口 (0.0.0.0) 上的容器端口 80?如果,那么我可以在文档中的哪里看到,这种行为是否可以限制为一组特定的容器接口?
https://docs.docker.com/config/containers/container-networking/
【问题讨论】:
-
在这种细节级别上考虑“容器接口”是不寻常的;通常唯一重要的是入站连接将到达容器的
eth0,因此如果容器进程 bind(2) 到 127.0.0.1 那么它实际上不会获得入站连接。您是否正在尝试将特定主机接口映射到容器内的多个侦听器?在端口级别执行此操作会更好一些。 -
“将特定主机接口映射到容器内的多个侦听器”是什么意思?我的问题是容器内的一个进程绑定到
127.0.0.1:8080,但是如果我指定-p 8080:8080,那么当连接到我的主机的127.0.0.1:8080时,该进程无法获得连接(为什么?)。使用 netcat 进行测试,它报告127.0.0.1:8080是打开的,但容器进程没有得到连接,如果它绑定到eth0而不是。 -
@DavidMaze - 您是否有参考文档:“通常唯一重要的是入站连接将到达容器的 eth0”?
标签: linux docker containers