文章描述了如何在运行中的容器端口冲突时,通过停止容器、修改hostconfig.json文件将外部端口从9200改为9201,然后停止和重启Docker服务以及相关容器,最后处理可能的containeridexists错误的过程。
修改运行中容器的端口
正在运行的容器端口冲突了,但是还需要这个容器,怎么办?只能修改端口了
过程:
- 停止需要修改的容器
- 修改
hostconfig.json
文件 - 重启 docker 服务
- 启动修改容器
停止需要修改的容器
[root@test ~]# docker stop grafana
查看hostname路径
[root@test ~]# docker inspect grafana |grep HostnamePath "HostnamePath": "/var/lib/docker/containers/39b1633c38f45460d6fb11161e04550dc97bc68b345ae276eb12eb07babd1f42/hostname",
进入容器路径
[root@test ~]# cd /var/lib/docker/containers/39b1633c38f45460d6fb11161e04550dc97bc68b345ae276eb12eb07babd1f42/
修改文件中的 HostPort(外部地址)
根据个人需求修改
[root@test ~]# vim hostconfig.json "PortBindings":{"9200/tcp":[{"HostIp":"","HostPort":"9201"}], # 修改外部端口就是所有HostPort名字的端口
停止其他容器
[root@test ~]# docker stop node 。。。
停止 docker服务
[root@test ~]# systemctl stop docker
启动 docker服务
[root@test ~]# systemctl start docker
启动其他容器
[root@test ~]# docker start node 。。。
报错 container with id exists 处理
# 启动报错 [root@test ~]# docker start grafana Error response from daemon: oci runtime error: container with id exists: 39b1633c38f45460d6fb11161e04550dc97bc68b345ae276eb12eb07babd1f42 Error: failed to start containers: grafana # 搜索 /run/runc/ 下的 docker id [root@test ~]# find /run -name 39b1633c38f45460d6fb11161e04550dc97bc68b345ae276eb12eb07babd1f42 /run/runc/39b1633c38f45460d6fb11161e04550dc97bc68b345ae276eb12eb07babd1f42 # 找到 /run/runc 开头的 删除重启即可 [root@test ~]# rm -rf /run/runc/39b1633c38f45460d6fb11161e04550dc97bc68b345ae276eb12eb07babd1f42