失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 追加docker已运行容器添加或修改端口映射方法

追加docker已运行容器添加或修改端口映射方法

时间:2023-11-30 11:16:28

相关推荐

追加docker已运行容器添加或修改端口映射方法

docker run可以指定端口映射

docker run -d -p 80:80 --name name

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

$ docker stop A$ docker commit A imageA #将容器commit提交成为一个镜像$ docker rm A #删除原镜像$ docker run -d -p 80:80 --name A imageA #启动新镜像

但这样太麻烦了。现在有新方案来解决掉:

## 查看id 就是 容器的 hash_of_the_container 数值

docker inspect 容器id 第一个ID就是完整的容器id

修改容器的配置, 需要重启 DOCKER 服务, 否则会失败

停止容器, 停止服务 (systemctl stop docker 或 service docker stop)

## 修改hostconfig.json

vim /var/lib/docker/containers/[hash_of_the_container]/hostconfig.json

在 hostconfig.json 里有 "PortBindings":{} 这个配置项,可以改成 "PortBindings":{"80/tcp":[{"HostIp":"0.0.0.0","HostPort":"8080"}]}

例 hostconfig.json 已删除不相关配置, 只保留格式

{"PortBindings": {"5700/tcp": [{"HostIp": "","HostPort": "10086"}],"6700/tcp": [{"HostIp": "","HostPort": "6700"}],"9000/tcp": [{"HostIp": "","HostPort": "8080"}]}}

## 修改config.v2.json

vim /var/lib/docker/containers/[hash_of_the_container]/config.v2.json

如果没有ExposedPorts 在 config.v2.json 里面添加一个配置项 "ExposedPorts":{"80/tcp":{}} , 将这个配置项添加到 "Tty": true, 前面,如果有就添加 "80/tcp":{} 端口即可。

例 config.v2.json 已删除不相关配置, 只保留格式

{"Config": {"ExposedPorts": {"5700/tcp": {},"6700/tcp": {},"9000/tcp": {}}}}

## 最后重启服务, 启动容器 (systemctl start docker/service docker start)

## 查看配置项已经修改成功

docker inspect 容器id

如果安装了防火墙 Iptables 还有个不需要修改即可端口映射的临时方法:

查看容器ID的IP地址:docker inspect 容器id | grep IPAddress

该命令获取了docker容器的在宿主机里的真实ip,然后使用宿主机的端口转发功能iptables

iptables -t nat -A DOCKER -p tcp --dport 宿主机端口 -j DNAT --to-destination 容器ip:容器端口

,注意这个方法并不是docker的命令,所以他扩展出的端口不在docker port命令列表里面。

查看所有容器内ip

docker inspect --format='{{.NetworkSettings.IPAddress}}' $(docker ps -a -q)

有时候,我们创建容器时忘了添加参数 --restart=always ,当 Docker 重启时,容器未能自动启动,可docker命令修改

docker container update --restart=always 容器名字

停止所有容器命令:

sudo docker stop $(docker ps -a | awk '{ print $1}' | tail -n +2)

启动所有容器命令:

sudo docker start $(docker ps -a | awk '{ print $1}' | tail -n +2)

如果觉得《追加docker已运行容器添加或修改端口映射方法》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。