Docker 建立好容器后,配置并不容易修改,本文记录修改建立好的容器的端口映射的方法。
背景
- 已经建立好了容器,配置了初始端口映射信息
- 但是端口映射错了/多了/少了,需要调整容器的端口映射
具体方法
方法一
- 将当前容器通过
docker commit命令生成镜像 - 通过镜像重新建立容器,建立时使用正确的端口映射
好处是包治百病,正规途径 缺点就是过程繁琐,不够优雅
方法二
端口映射等容器信息都是存在某个地方,通过配置文件管理的,我们仅需修改配置文件的端口信息即可完成改写
- 以我当前的 nginx 容器为例
- 查看需要修改的容器信息
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5190850b4fcc nginx "/docker" 9 hours ago Up 9 hours 80/tcp, 0.0.0.0:9443->443/tcp, :::9443->443/tcp nginx- 当前容器名称 nginx,
CONTAINER ID是5190850b4fcc - 当前端口映射了 9443:443,现在我要添加一个 9442:442 的端口映射
- 停止容器
docker stop nginx- 停止 docker 服务
systemctl stop docker- 进入文件夹
/var/lib/docker/containers/{CONTAINER ID}
代码语言:javascript复制和
CONTAINER ID容器相关的配置都在其 ID 对应的子目录里
cd /var/lib/docker/containers/5190850b4fc...- 当前目录文件
# ls
5190850b4fcc...-json.log config.v2.json hostname mounts resolv.conf.hash
checkpoints hostconfig.json hosts resolv.conf我们需要修改的是
hostconfig.json和config.v2.json两个文件
- 修改
hostconfig.json
- 在查看内容时,可以发现 json 中 PortBindings 键值对应的内容即是端口映射
- 当前内容(已经映射了 9443:443)
"PortBindings":{"443/tcp":[{"HostIp":"","HostPort":"9443"}]}- 此时再添加 9442:442,该部分内容变为
"PortBindings":{"442/tcp":[{"HostIp":"","HostPort":"9442"}],"443/tcp":[{"HostIp":"","HostPort":"9443"}]}- 修改
config.v2.json
- 同理在 ExposedPorts 键值下添加 442 端口
"ExposedPorts":{"442/tcp":{},"443/tcp":{},"80/tcp":{}}- 如果NetworkSettings 下有端口信息也需要做相应修改
- 开启docker 服务
systemctl start docker- 运行容器
docker start nginx- 测试是否成功
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5190850b4fcc nginx "/docker" 12 hours ago Up 2 hours 80/tcp, 0.0.0.0:9442->442/tcp, :::9442->442/tcp, 0.0.0.0:9443->443/tcp, :::9443->443/tcp nginx- 可以看到已经增加了端口映射
参考资料
- https://www.cnblogs.com/richerdyoung/p/10154753.html


