在docker运行容器时需要指定映射端口,那如果刚开始没有考虑的那么周全,后期遇到需要添加的端口时该怎么办呢。
网上常见的方法有两种:
1.配置防火墙转发端口。
2.把docker容器打包成镜像,然后以该镜像为基础新建一个容器。

笔者比较中意第二种方法,然而就在准备实施的时候发现了更好用的第三种方法。
(注:该方法不受官方保护,谨慎使用,后果自负)

docker容器被创建后会在服务器上保存一个文件夹,配置文件也放在此处,解决方法就是找到映射段都得配置文件修改就行了。

  1. 修改之前先停掉docker
$ systemcel stop docker
  1. 在 /var/lib/docker/containers/[容器ID]/下找到hostconfig.json
    找到映射IP的位置,复制一个已映射的IP,修改为自己需要的就好(888是我新增的)
"PortBindings": {
    "888/tcp": [
      {
        "HostIp": "",
        "HostPort": "888"
      }
    ],
    "21/tcp": [
      {
        "HostIp": "",
        "HostPort": "21"
      }
    ]
}

3.相同的目录下找到config.v2.json
该文件中有两处需要修改

"ExposedPorts": {
  "888/tcp": {},
  "21/tcp": {}
}
"Ports": {
    "888/tcp": [
        {
          "HostIp": "0.0.0.0",
          "HostPort": "888"
        }
    ],
    "21/tcp": [
        {
          "HostIp": "0.0.0.0",
          "HostPort": "21"
        }
    ]
}
  1. 修改完之后启动docker
$ systemctl start docker
  1. 执行成功之后启动容器然后查看容器运行状态就可以看到新增加的端口在映射关系里已存在。
  2. 同理也可以去除端口映射。
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐