针对已运行的容器添加端口映射
1、查看容器是否映射端口
docker port [容器id 或 容器名]
1
有端口映射:
无端口映射:
2、查看容器完整Id
docker inspect [容器id] | grep Id
// 得到以下结果
// "Id": "fcae55f5180a79487662de426863565c7df05ed9b87854093b62776734928d25",
123
3、进入docker容器目录查看
cd /var/lib/docker/containers/var/lib/docker/containers
1
4、根据得到的容器完整id进入目录
cd fcae55f5180a79487662de426863565c7df05ed9b87854093b62776734928d25
1
目录中分别有两个文件:hostconfig.json
和 config.v2.json
,直接查看文件内容比较混乱可以下载到本机,使用json工具查看。
5、修改配置文件
hostconfig.json
// 当前容器 3306 端口绑定到本机 3306 端口
"PortBindings": {
"3306/tcp": [
{
"HostIp": "",
"HostPort": "3306"
}
]
},
123456789
config.v2.json
// 这个文件需要查看两个位置
// 暴露 3306、33060 端口
"ExposedPorts": {
"3306/tcp": {
},
"33060/tcp": {
}
},
// 和
// 这一段应该是表示哪些ip可以访问之类的
// 如下也是我从一个 docker run -d -p80:80 ... 带有端口映射的容器的 config.v2.json 文件中复制出来修改后的
"Ports": {
"3306/tcp": [
{
"HostIp": "0.0.0.0",
"HostPort": "3306"
},
{
"HostIp": "::",
"HostPort": "3306"
}
],
"33060/tcp": null
},
12345678910111213141516171819202122232425
6、替换配置文件
-
停止容器
docker stop [容器Id 或 容器名] 1
-
将修改过后的配置文件复制到指定目录下
/var/lib/docker/containers/完整容器Id
,(怕修改错误可以先备份原有的文件) -
重启docker
systemctl restart docker 1
-
重启后可以先查看
hostconfig.json
和config.v2.json
两个配置文件是否是修改过后的,如果不是可以尝试多上传几次(我就是这样的) -
最后再查看端口号是否有映射
docker port [容器id 或 容器名称] 1