啟動容器A, A的端口映射是 80:8080
外部的25000端口映射到服務內部的8080端口;有時候將容器關閉,重新構建鏡像及啟動容器時會出現一些報錯,
比如端口被占用的報錯,但通過docker ps -a |grep 容器名, 會發現容器其實已經關閉,但仍然無法啟動新的容器
這里通過iptables 關閉docker映射到host上的端口
主機與docker中的端口轉發是通過主機的iptables實現的
iptables -t nat -nL --line-number |grep 80 , 列出nat表所有鏈的所有規則,
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE tcp -- 172.17.0.9 172.17.0.9 tcp dpt:8080
Chain DOCKER (2 references)
target prot opt source destination
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 to:172.17.0.2:8080
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 to:172.17.0.9:8080
這里說明外部的80端口映射給了兩個容器的IP, 172.17.0.2 172.17.09 , 需要手工將之前的映射規則刪除掉
解決辦法:
iptables -t nat -D DOCKER 2 刪除chain docker中的第二條規則