引言
有时想在运行的容器中再添加一个端口,特别是使用 nginx docker 时,刚开始没有预留足够的端口映射,后来又要添加几个项目,还不想启动多个nginx的容器,那么就一心想添加几个端口映射。
比如我想添加 宿主机的 [18080] 到 docker 的 [8080] 端口。
方法一:重新生成镜像
在当前容器基础上打包新镜像,重新生成容器。这种方法不喜欢,就不说了。
方法二:修改配置文件
要修改 /var/lib/docker/containers/[containerId] 目录下,hostconfig.json 和 config.v2.json 两个配置文件。
1. 停 docker 服务
一定要先停 docker 服务,要不修改无效,还会被刷回去。
systemctl stop docker
停止 docker 服务,所有的 docker 容器也自动停了。
2. 修改配置文件
2.1 修改 hostconfig.json文件
只需给 PortBindings 选项添加一项 "8080/tcp":[{"HostIp":"","HostPort":"18080"}]
{
# ... 省略其他不相关
"PortBindings":{
"22/tcp":[{"HostIp":"","HostPort":"5022"}],
# 添加新的映射代码
"8080/tcp":[{"HostIp":"","HostPort":"18080"}]
},
# ... 省略其他不相关
}
2.2 修改config.v2.json 文件
需要给 ExposedPorts 和 Ports 两处都分别添加内容:
# ... 省略其他不相关
# 对外暴露端口
"ExposedPorts":{
"22/tcp":{},
# 添加新的映射代码
"8080/tcp":{}
}
# ... 省略其他不相关
# 如果Ports字段本来就是空,那就不用修改
"Ports": {
"22/tcp": [{"HostIp": "0.0.0.0","HostPort": "5022"}],
# 添加新的映射代码
"8080/tcp": [{"HostIp": "0.0.0.0","HostPort": "18080"}],
}
# ... 省略其他不相关
docker 配置文件 config.v2.json 中 Ports 和 hostconfig.json 中 PortBindings 区别:
config.v2.json主要用于描述容器的配置信息,Ports字段用于指定容器内部正在监听的端口,即容器内的端口。因为ExposedPorts字段已经对外暴露了端口,所以如果宿主机所有ip都可以映射到暴露的端口,那么此处Ports字段就可以为空。如果需要设置对应的IP那么就应该设置。
hostconfig.json主要用于描述容器与宿主机之间的交互信息,PortBindings字段用于指定容器内部端口与宿主机端口的映射关系,用于实现容器内部服务的外部访问。
总结
docker 配置文件 config.v2.json 中 Ports 和 hostconfig.json 中 PortBindings 感觉重复了,冗余了。
config.v2.json 文件用于描述容器的配置信息,包括容器的命令、环境变量、暴露的端口等。其中的 Ports 字段指定容器内部正在监听的端口,但并不表示这些端口会映射到宿主机上。
hostconfig.json 文件用于描述容器与宿主机之间的交互信息,包括端口映射、挂载卷等。其中的 PortBindings 字段指定容器内部端口与宿主机端口的映射关系,用于实现容器内部服务的外部访问。
由于 Ports 和 PortBindings 都涉及容器的端口映射,有时候可能会造成一些冗余和混淆。一般来说,在 Docker 中,推荐使用 PortBindings 来指定容器的端口映射,而将 config.v2.json 中的 Ports 字段留空或不指定。这样可以更清晰地表达容器与宿主机之间的端口映射关系,减少重复配置。
不过,需要注意的是,具体的配置方式和文件内容可能会根据不同的 Docker 版本和工具而有所不同。为了确保正确的端口映射和容器配置,建议查阅相关的 Docker 官方文档或使用合适的 Docker 工具来设置容器的端口映射规则和其他配置。
更新精彩文章请关注微信公众号:大胡几哥哥

文章介绍了如何在已运行的Docker容器中添加端口映射,特别是针对nginxDocker容器。方法包括直接修改容器的hostconfig.json和config.v2.json文件,添加PortBindings和ExposedPorts字段,以实现宿主机与容器间的端口映射。同时指出了Docker配置文件中Ports和PortBindings的区别及冗余问题。



5122

被折叠的 条评论
为什么被折叠?



