docker给已存在的容器添加或修改端口映射
Posted hellowshuo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker给已存在的容器添加或修改端口映射相关的知识,希望对你有一定的参考价值。
简述:
这几天研究了一下docker, 发现建立完一个容器后不能增加端口映射了,因为 docker run -p
有 -p
参数,但是 docker start
没有 -p
参数,让我很苦恼,无奈谷歌了一番,终于让我找到了解决办法
解决办法:
一种是将原来的容器提交成镜像,然后利用新的建立的镜像重新建立一个带有端口映射的容器,不推荐这种办法
另一种就是改容器配置文件(也是我推荐的解决办法):配置文件在 /var/lib/docker/containers/[hash_of_the_container]/hostconfig.json
还有 config.v2.json
这俩文件
hash_of_the_container 可以通过 docker inspect 容器名字
来查看
id 就是 容器的 hash 数值,在 hostconfig.json
里有 "PortBindings":{}
这个配置项,可以改成 "PortBindings":{"80/tcp":[{"HostIp":"","HostPort":"8080"}]}
这里 80 是容器端口, 8080 是本地端口, 然后在 config.v2.json
里面添加一个配置项 "ExposedPorts":{"80/tcp":{}} ,
将这个配置项添加到 "Tty": true,
前面,我不知道添加到别的地方会不会有影响,因为经过对比正常的端口映射配置项是在这个位置,这个就是将容器内部端口暴露出来,如果不加这一句端口映射不会成功的,最后重启 docker的守护进程 service docker restart
这里有个问题就是重启后 用docker ps -a
是看不到端口映射的,但实际已经映射好了,我正常在新建一个带有端口映射容器的时候,重启 docker的守护进程,端口映射也不会显示出来,但是通过docker inspect 容器名
可以看到配置项已经修改成功了。
以上是关于docker给已存在的容器添加或修改端口映射的主要内容,如果未能解决你的问题,请参考以下文章