修改一个已存在的 Docker 容器的端口映射

 Technique  comment

众所周知,容器一旦生成,端口就无法修改,只能保存镜像后重启容器,本文引入一个新方式进行解决。

思路

容器的创建会拉取镜像,然后根据用户的命令生成容器的配置文件,因此可以直接修改配置文件实现曲线救国。

步骤

停止容器

# docker container stop CONTAINER_ID

停止服务

# systemctl stop docker

修改配置

使用 yum 安装的 docker 配置文件在 /var/lib/docker/container/*

可以看到文件夹内有以下配置文件

$ ll
total 24K
drwx------ 2 root root 4.0K Dec 12 11:54 checkpoints
-rw------- 1 root root 2.9K Dec 12 11:54 config.v2.json
-rw-r--r-- 1 root root 1.6K Dec 12 11:54 hostconfig.json
-rw-r--r-- 1 root root  174 Dec 12 11:54 hosts
-rw-r--r-- 1 root root   89 Dec 12 11:54 resolv.conf
-rw-r--r-- 1 root root   71 Dec 12 11:54 resolv.conf.hash

其中的 hostconfig.json 是容器的端口配置文件

# vim hostconfig.json

可以看到字段

"PortBindings":{}

注意:此例为未开放端口的容器实例。

按照格式添加端口映射即可

"PortBindings":{"3306/tcp":[{"HostIp":"","HostPort":"3306"}]}

注意:前部分为容器实例端口,后部分为宿主机端口。若开放多个端口,按照格式添加字段即可。

启动服务

# systemctl start docker

启动容器

若容器无配置健康检查,请启动容器。

附录

参考链接

回复