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

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

我们的目标是星辰大海更改 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 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的操作系统上。容器完全使用沙箱机制,几乎没有性能开销,可以很容易地在机器和数据中心中运行。

    494 引用 • 928 回帖
  • port
    2 引用 • 1 回帖
  • binding
    1 引用 • 1 回帖

相关帖子

欢迎来到这里!

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

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