1. 将当前容器commit成镜像,重新使用-p命令映射端口
  2. 增加一个网络,通过nginx反代实现端口映射,无需重启容器
  3. 通过修改配置实现,需要重启docker服务和容器,本文使用此方法

获取容器ID

docker inspect <容器名> | grep Id
# "Id": "22132e73736a5700dd5b4215a122310220fc3192b19754917caa1b83ecb89dd3",

停止目标容器和Docker

docker stop <容器名>
service docker stop

修改配置文件

修改hostconfig.json

sudo vim /var/lib/docker/containers/<容器Id>/hostconfig.json

对如下内容进行修改

{
"PortBindings":{
   "22/tcp":[{"HostIp":"","HostPort":"10112"}],
   "5901/tcp":[{"HostIp":"","HostPort":"10113"}],
   // 在这里增加映射端口,示例:
   // "4438/tcp":[{"HostIp":"","HostPort":"4438"}],
   // "443/tcp":[{"HostIp":"","HostPort":"443"}],
   // ...
 },
}

修改config.json

sudo vim /var/lib/docker/containers/<容器Id>/config.v2.json

对如下内容进行修改

{
    "ExposedPorts":{
        "22/tcp":{},
        "5901/tcp":{},
        // 在这里增加映射端口,需与hostconfig.json中的修改对应,示例:
        // "4438/tcp":{},
        // "443/tcp":{}
        // ...
    }
}

重启Docker服务

重启Docker服务

service docker restart

启动容器

docker container start <容器名>

查看映射端口

docker container port <容器名>

参考链接

  1. https://blog.51cto.com/u_15228753/2818167#top

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