修改docker容器端口映射的方法

转载:https://blog.csdn.net/m0_37886429/article/details/82757116

(注)我使用的方法一验证没有问题。

大家都知道docker run可以指定端口映射,但是容器一旦生成,就没有一个命令可以直接修改。通常间接的办法是,保存镜像,再创建一个新的容器,在创建时指定新的端口映射。

有没有办法不保存镜像而直接修改已有的这个容器呢?有。在stackoverflow上面找到答案了,原帖链接

方法一

  • 1、停止容器(docker stop d00254ce3af7)
  • 2、停止docker服务(systemctl stop docker)
  • 3、修改这个容器的hostconfig.json文件中的端口(原帖有人提到,如果config.v2.json里面也记录了端口,也要修改)
cd /var/lib/docker/containers/d00254ce3af7*     #这里是CONTAINER ID

vim hostconfig.json
如果之前没有端口映射, 应该有这样的一段:
"PortBindings":{}

增加一个映射, 这样写:
"PortBindings":{"8080/tcp":[{"HostIp":"","HostPort":"60000"}]}
前一个数字是容器端口, 后一个是宿主机端口。将宿主机的60000端口映射到容器的8080端口
而修改现有端口映射更简单, 把端口号改掉就行。

 注:我原来的容器中只有22的对外访问,现在想在容器中部署一个springboot项目,端口为8091,则修改如下:

"PortBindings":{"22/tcp":[{"HostIp":"","HostPort":"10022"}],"8091/tcp":[{"HostIp":"","HostPort":"8000"}]}

 

  • 4、启动docker服务(systemctl start docker)
  • 5、启动容器(docker start d00254ce3af7)

hostconfig.json文件

config.v2.json文件

注:config.v2.json文件修改为(原文档修改的是Ports位置,验证有问题,改为修改ExposedPorts)

"ExposedPorts":{"22/tcp":{},"8091/tcp":{}},

 

方法二

1、获得容器IP
将container_name 换成实际环境中的容器名

docker inspect `container_name` | grep IPAddress
  • 1

2、iptable转发端口
将宿主机的60000端口映射到容器的8080端口

iptables -t nat -A  DOCKER -p tcp --dport 60000 -j DNAT --to-destination 172.17.0.2:8080

你可能感兴趣的