对运行中的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

参考:
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

猜你喜欢

转载自blog.csdn.net/weixin_36343850/article/details/79954167