如何将端口映射分配给现有的Docker容器?

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

我也对这个问题感兴趣。

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

要添加端口转发,我总是遵循这些步骤,

  1. 停止运行容器

    docker stop test01 
  2. 提交容器

     docker commit test01 test02 

    注:以上, test02是我从test01容器中构build的新图像。

  3. 从提交的图像重新运行

     docker run -p 8080:8080 -td test02 

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

您可以通过直接编辑/var/lib/docker/containers/[hash_of_the_container]/hostconfig.jsonhostconfig.json文件来更改端口映射

您可以通过docker docker inspect <container_name>命令确定[hash_of_the_container],“Id”字段的值是散列值。

 1) stop the container 2) change the file 3) restart your docker engine (to flush/clear config caches) 4) start the container 

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

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

如果“存在”是指“正在运行”,那么不能(现在)添加端口映射。

但是,如果您需要在正在运行的容器中公开服务而不停止/重新启动服务,则可以dynamic地添加一个新的networking接口(例如“ pipe道”) 。

不知道您是否可以应用端口映射正在运行的容器。 您可以在运行与创build新容器不同的容器时应用端口转发。

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

将开始运行容器。 本教程介绍了端口redirect。

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

在做docker run之前,您可以删除原始容器,然后再次为该容器分配相同的名称:

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

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

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

  1. 下载kitematic

  2. 进入容器的设置页面,在端口选项卡上,可以直接在那里修改发布的端口。

  3. 再次启动容器

如果你不熟悉Docker深度configurationIPtables,那么你周围的其他方法将是你的朋友。

iptables -t nat -A DOCKER -p tcp –dport $ {YOURPORT} -j DNAT – 到目标$ {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}

这只是一个窍门,而不是一个推荐的方式,这与我的scheme,因为我不能阻止容器我希望也会帮助你。

如果您只是想更改正在运行的容器的端口,请执行以下操作:

  1. 停止现有的容器

    sudodocker停止NAME

  2. 现在重新启动新的端口映射

    sudodocker运行-d -p 81:80名称

其中:

“-d”给docker的背景/ deamon

“-p”启用端口映射

您使用浏览器访问的“81”外部(暴露)端口

“80”内部docker集装箱监听端口