我们的目标是星辰大海更改 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 服务,否则会失败
- 停止容器,停止服务(systemctl stop docker/service docker stop)
$ docker stop A
$ systemctl stop docker
- 修改 /var/lib/docker/containers/{容器 ID+ 一些字符串}/hostconfig.json 中
"PortBindings":{"容器端口/tcp":[{"HostIp":"","HostPort":"宿主机端口"}]
同时修改同目录下的 config.v2.json 中 "ExposedPorts":{"容器端口/tcp":{}}
"Ports":{"容器端口/tcp":[{"HostIp":"0.0.0.0","HostPort":"宿主机端口"}]}
- 重启服务,启动容器(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)
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于