1. 程式人生 > >對執行中的Docker容器新增埠對映

對執行中的Docker容器新增埠對映

問題:如何對執行中的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

PS:如果想刪除的話,把以上命令中的 -A 換成 -D就可以了
參考:

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