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


当前回答

集装箱岸吊法

如果有人正在使用portainer,我发现这个解决方案是“Gui友好和安全的”

去Portainer的集装箱 停止容器 选择“复制/编辑” 添加所需的端口并进行部署。 当被问到是替换还是取消时,选择替换。 享受生活

其他回答

编辑hostconfig。Json现在似乎不工作。它只以暴露该端口而不将其发布到主机而结束。提交和重新创建容器对我来说不是最好的方法。没人提到docker网络吗?

最好的解决方案是在同一网络中使用反向代理

Create a new network if your previous container not in any named ones. docker network create my_network Join your existing container to the created network docker network connect my_network my_existing_container Start a reversed proxy service(e.g. nginx) publishing the ports you need, joining the same network docker run -d --name nginx --network my_network -p 9000:9000 nginx Optionally remove the default.conf in nginx docker exec nginx rm /etc/nginx/conf.d/default.conf Create a new nginx config server { listen 9000; location / { proxy_pass http://my_existing_container:9000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } } Copy the config to nginx container. docker cp ./my_conf.conf nginx:/etc/nginx/conf.d/my_conf.conf Restart nginx docker restart nginx

优点:要发布新端口,你可以安全地停止/更新/重新创建nginx容器,而不需要触及业务容器。如果你需要nginx的零停机时间,可以添加更多的反向代理服务加入同一个网络。此外,一个容器可以加入多个网络。

编辑:

对于反向代理非http服务,配置文件有点不同。这里有一个简单的例子:

upstream my_service {
    server my_existing_container:9000;
}

server {
    listen 9000;
    proxy_pass my_service;
}

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

正如@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容器?

这很简单。有两件事,一个是本地服务器端口,如800,8080等在你的机器上,第二个是你的容器端口,你想映射。Docker端口映射

 docker run -p 8080:8080 <Image ID> 

要获得图像Id,您可以使用

docker ps

集装箱岸吊法

如果有人正在使用portainer,我发现这个解决方案是“Gui友好和安全的”

去Portainer的集装箱 停止容器 选择“复制/编辑” 添加所需的端口并进行部署。 当被问到是替换还是取消时,选择替换。 享受生活

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

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

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