對執行中的Docker容器進行埠對映
阿新 • • 發佈:2018-11-12
問題:如何對執行中的Docker容器進行埠對映?
- 解決方案如下:
iptables -t nat -A DOCKER -p tcp --dport ${YOURPORT} -j DNAT --to-destination ${CONTAINERIP}:${YOURPORT}
iptables -t nat -A POSTROUTING -j MASQUERADE -p tcp --source ${CONTAINERIP} --destination ${CONTAINERIP} --dport ${YOURPORT}
iptables -A DOCKER -j ACCEPT -p tcp --destination ${CONTAINERIP} --dport ${YOURPORT}
總共有3條命令,把他們執行在安裝了docker的宿主機上。其中就修改兩個引數:
- ${CONTAINERIP} 就是對應容器的ip地址,比如我的容器ip地址是 172.17.0.2 ,(容器的IP可以通過如下方式檢視:a.在容器中:
ip addr
;b.在宿主機中:docker inspect 容器名 |grep IPAddress
)所以我就把上述的引數換成我的IP地址。 - ${YOURPORT} 就是要映射出來的埠,我配置的是一個hadoop平臺,其埠是50070
- 所以最終我的幾條命令更改如下:
sudo iptables -t nat -A DOCKER -p tcp --dport 50070 -j DNAT --to-destination 172.17.0.2:50070
sudo iptables -t nat -A POSTROUTING -j MASQUERADE -p tcp --source 172.17.0.2 --destination 172.17.0.2 --dport 50070
sudo iptables -A DOCKER -j ACCEPT -p tcp --destination 172.17.0.2 --dport 50070
參考:
https://stackoverflow.com/questions/19335444/how-do-i-assign-a-port-mapping-to-an-existing-docker-container
http://yaxin-cn.github.io/Docker/expose-port-of-running-docker-container.html