如何将端口映射分配给现有的Docker容器?
我不确定是否在这里误解了某些东西,但似乎只能通过从映像创build一个新的容器来设置端口映射。 有没有办法将端口映射分配给现有的Docker容器?
我也对这个问题感兴趣。
正如@Thasmo提到的,端口转发只能通过“docker run”命令指定。
其他命令“docker start”没有-p选项,“docker port”只显示当前的转发。
要添加端口转发,我总是遵循这些步骤,
-
停止运行容器
docker stop test01
-
提交容器
docker commit test01 test02
注:以上,
test02
是我从test01
容器中构build的新图像。 -
从提交的图像重新运行
docker run -p 8080:8080 -td test02
第一个8080是本地端口,第二个8080是集装箱端口。
您可以通过直接编辑/var/lib/docker/containers/[hash_of_the_container]/hostconfig.json
的hostconfig.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用户,现在有另一种非常简单友好的方法来更改映射端口:
下载kitematic
进入容器的设置页面,在端口选项卡上,可以直接在那里修改发布的端口。
再次启动容器
如果你不熟悉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,因为我不能阻止容器我希望也会帮助你。
如果您只是想更改正在运行的容器的端口,请执行以下操作:
- 停止现有的容器
sudodocker停止NAME
- 现在重新启动新的端口映射
sudodocker运行-d -p 81:80名称
其中:
“-d”给docker的背景/ deamon
“-p”启用端口映射
您使用浏览器访问的“81”外部(暴露)端口
“80”内部docker集装箱监听端口