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


当前回答

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

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

其他回答

可以通过直接编辑hostconfig修改端口映射。Json文件 /var/lib/docker/containers/ hash_of_the_container / hostconfig。/var/snap/docker/common/var-lib-docker/containers/[hash_of_the_container]/hostconfig. Json或/var/snap/docker/common/var-lib-docker/containers/[hash_of_the_container]/hostconfig. Json。如果你安装Docker作为一个snap. json,我相信。

你可以通过docker inspect <container_name>命令来确定[hash_of_the_container],“Id”字段的值就是哈希值。

停止容器(docker Stop <container_name>)。 停止docker服务(根据Tacsiazuma的评论) 修改文件。 重新启动docker引擎(刷新/清除配置缓存)。 启动容器(docker Start <container_name>)。

所以你不需要用这种方法创建一个图像。您还可以在这里更改重启标志。

附注:您可以访问https://docs.docker.com/engine/admin/了解如何根据您的主机正确重新启动docker引擎。我使用sudo systemctl restart docker重新启动在Ubuntu 16.04上运行的docker引擎。

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

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

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

不确定是否可以应用端口映射运行的容器。您可以在运行容器时应用端口转发,这与创建新容器不同。

$ docker run -p <public_port>:<private_port> -d <image>  

将开始运行容器。本教程解释端口重定向。

如果你不适应Docker深度配置,iptables将是你的朋友。

iptables -t nat -A DOCKER -p tcp --dport ${YOURPORT} -j DNAT --to-destination ${CONTAINERIP}:${YOURPORT}

iptables -t nat -A POSTROUTING -j MASQUERADE -p tcp --source ${CONTAINERIP} --destination ${CONTAINERIP} --dport ${YOURPORT}

iptables -A DOCKER -j ACCEPT -p tcp --destination ${CONTAINERIP} --dport ${YOURPORT}

这只是一个技巧,不是推荐的方法。这适用于我的场景,因为我无法停止容器。