簡體   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