我不确定我是否误解了这里的某些内容,但似乎只能通过从映像创建新容器来设置端口映射。是否有办法将端口映射分配到现有的Docker容器?


当前回答

对于Windows和Mac用户,还有另一种非常简单友好的方法来更改映射端口:

下载kitematic 进入容器的“设置”页面,在“端口”页签中,可以直接在那里修改已发布的端口。 再次启动容器

其他回答

在Fujimoto Youichi的例子中,test01是一个容器,而test02是一个图像。

在运行docker之前,你可以删除原来的容器,然后重新给容器分配相同的名称:

$ docker stop container01
$ docker commit container01 image01
$ docker rm container01
$ docker run -d -P --name container01 image01

(使用-P将端口暴露给随机端口,而不是手动分配)。

我对这个问题也很感兴趣。

正如@Thasmo提到的,端口转发只能通过docker run(和docker create)命令指定。 其他命令,docker start没有-p选项,docker port只显示当前转发。

要添加端口转发,我总是遵循以下步骤,

停止运行容器 Docker停止test01 提交容器 Docker提交test01 test02 注意:上面的test02是我从test01容器构建的一个新映像。 从已提交的映像重新运行 Docker运行-p 8080:8080 -td test02

其中第一个8080是本地端口,第二个8080是集装箱端口。

停止docker引擎和容器。 进入/var/lib/docker/containers/${container_id}目录,编辑hostconfig.json 编辑PortBindings。HostPort您想要更改。 启动码头引擎和容器。

如果你运行docker run <NAME>,它将生成一个新映像,这很可能不是你想要的。

如果你想改变当前的图像,请执行以下操作:

Docker ps a

获取目标容器的id,然后转到:

cd /var/lib/docker/containers/<conainerID><and then some:)>

停止容器:

docker stop <NAME>

更改文件

vi config.v2.json

"Config": {
    ....
    "ExposedPorts": {
        "80/tcp": {},
        "8888/tcp": {}
    },
    ....
},
"NetworkSettings": {
....
"Ports": {
     "80/tcp": [
         {
             "HostIp": "",
             "HostPort": "80"
         }
     ],

然后更改文件

vi hostconfig.json

"PortBindings": {
     "80/tcp": [
         {
             "HostIp": "",
             "HostPort": "80"
         }
     ],
     "8888/tcp": [
         {
             "HostIp": "",
             "HostPort": "8888"
         } 
     ]
 }

重新启动docker,它应该可以工作。

对于Windows和Mac用户,还有另一种非常简单友好的方法来更改映射端口:

下载kitematic 进入容器的“设置”页面,在“端口”页签中,可以直接在那里修改已发布的端口。 再次启动容器