更改 Docker 容器端口映射 (创建, 替换, 修改, 运行时)

本贴最后更新于 2022 天前,其中的信息可能已经时移世易

我们的目标是星辰大海更改 Docker 容器端口映射


以下方法在 Ubuntu16.04 下测试通过

但我觉得还是蛮通用的


1.创建容器时的端口映射
docker run -d -p 80:80 --name name
2.替换容器,需要停止容器
$ docker stop A
$ docker commit A imageA
$ docker rm A
$ docker run -d -p 80:80 --name A imageA
3.修改容器的配置,需要重启 DOCKER 服务,否则会失败
  1. 停止容器,停止服务(systemctl stop docker/service docker stop)
$ docker stop A
$ systemctl stop docker
  1. 修改 /var/lib/docker/containers/{容器 ID+ 一些字符串}/hostconfig.json 中
"PortBindings":{"容器端口/tcp":[{"HostIp":"","HostPort":"宿主机端口"}]

同时修改同目录下的 config.v2.json 中 "ExposedPorts":{"容器端口/tcp":{}}

"Ports":{"容器端口/tcp":[{"HostIp":"0.0.0.0","HostPort":"宿主机端口"}]} 
  1. 重启服务,启动容器(systemctl start docker/service docker start)
$ systemctl start docker
$ docker start A 

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

{
    "Config": {
        "ExposedPorts": {
            "5700/tcp": {},
            "6700/tcp": {},
            "9000/tcp": {}
        }
    },
    "NetworkSettings": {
        "Ports": {
            "5700/tcp": [{
                "HostIp": "0.0.0.0",
                "HostPort": "10086"
            }],
            "6700/tcp": [{
                "HostIp": "0.0.0.0",
                "HostPort": "6700"
            }],
            "9000/tcp": [{
                "HostIp": "0.0.0.0",
                "HostPort": "8080"
            }]
        }
    }
} 

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

{
    "PortBindings": {
        "5700/tcp": [{
            "HostIp": "",
            "HostPort": "10086"
        }],
        "6700/tcp": [{
            "HostIp": "",
            "HostPort": "6700"
        }],
        "9000/tcp": [{
            "HostIp": "",
            "HostPort": "8080"
        }]
    }
}
4.在容器运行时添加映射
iptables -t nat -A DOCKER -p tcp --dport 宿主机端口 -j DNAT --to-destination 容器ip:容器端口

查看容器 ip

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

参考:https://stackoverflow.com/questions/19335444/how-do-i-assign-a-port-mapping-to-an-existing-docker-container

  • Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的操作系统上。容器完全使用沙箱机制,几乎没有性能开销,可以很容易地在机器和数据中心中运行。

    476 引用 • 899 回帖
  • port
    2 引用 • 1 回帖
  • binding
    1 引用 • 1 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...