当前位置:   article > 正文

Docker容器修改端口映射_docker修改容器端口映射

docker修改容器端口映射

Docker容器修改端口映射

https://zhuanlan.zhihu.com/p/94949253

对于已经建立的docker容器,需要新增容器对主机的端口映射,主要分为三种:

一:通过修改配置文件修改docker容器端口映射

1.使用docker ps -a命令找到要修改容器的CONTAINER ID

2.运行以下命令,进入该容器目录

  1. docker inspect【CONTAINER ID】| grep Id
  2. cd /var/lib/docker/containers

2.停止容器

docker stop [容器id]

3.停止主机docker服务

systemctl stop docker

4.进入2得到的文件夹内,修改hostconfig.json 和 config.v2.json

  1. vi hostconfig.json
  2. 比如新增一个 80 端口,在PortBindings下边添加以下内容,端口配置之间用英文字符逗号隔开
  3. "80/tcp": [
  4. {
  5. "HostIp": "0.0.0.0",
  6. "HostPort": "80"
  7. }
  8. ]
  9. 接着修改vi config.v2.json, 找到ExposedPorts和Ports 仿照之前内容添加端口映射
  10. "ExposedPorts": {
  11. "2000/tcp": {}
  12. },
  13. "Ports":{
  14. "2000/tcp":[
  15. {
  16. "HostIp": "0.0.0.0",
  17. "HostPort": "2000"
  18. }
  19. ]
  20. },

5.保存之后重启docker服务和容器

  1. systemctl start docker
  2. docker start [docker id]

二:把运行中的容器生成新的镜像,再新建容器

1.提交一个运行中的容器为镜像

docker commit [containerid] [new_imagename]

2.运行新建的镜像并添加端口映射

docker run -d -p 8000:80  [imagename] /bin/sh

三:修改主机iptables端口映射

docker的端口映射并不是在docker技术中实现的,而是通过宿主机的iptables来实现。通过控制网桥来做端口映射,类似路由器中设置路由端口映射。

如果我们有一个容器的8000端口映射到主机的9000端口,先查看iptabes设置了什么规则:

sudo iptables -t nat -vnL

结果中有一条:

  1. Chain DOCKER (2 references)
  2. pkts bytes target prot opt in out source destination
  3. 98 5872 RETURN all -- docker0 * 0.0.0.0/0 0.0.0.0/0
  4. 237 14316 DNAT tcp -- !docker0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:9000 to:172.17.0.3:8000

我们可以看到docker创建了一个名为DOKCER的自定义的链条Chain。而我开放8000端口的容器的ip是172.17.0.3。

也可以通过inspect命令查看容器ip

docker inspect [containerId] |grep IPAddress

我们想再增加一个端口映射,比如8081->81,就在这个链条是再加一条规则:

sudo iptables -t nat -A  DOCKER -p tcp --dport 8081 -j DNAT --to-destination 172.17.0.3:81

加错了或者想修改:先显示行号查看

sudo iptables -t nat -vnL DOCKER --line-number

删除规则3

sudo iptables -t nat -D DOCKER 3
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/229455
推荐阅读
相关标签
  

闽ICP备14008679号