Docker更改活动容器上已发布的端口

例如,我想更改活动容器上发布的端口

docker run -p 80:80 --name nginx_live nginx 

然后稍后将其更改为另一个端口,例如-p 8080:80

Docker没有一个机制来改变一个容器已经发布的端口。 当你发布一个端口时,会发生两件事:

  • Docker在nat表中创buildiptables规则,将stream量redirect到“公共”端口到容器。
  • Docker启动一个监听该端口的代理服务来处理本地生成的stream量。

虽然理论上可以手动更新防火墙规则以使服务在新端口上可用,但是您将无法解除绑定Docker代理,因此无法使用该“公共”端口启动任何新服务。

你最好的行动就是删除容器并重新部署容器,或者依靠某种前端代理来处理redirect,而不是使用Docker的端口发布机制。

这不是一个Dockerfunction。

但是添加另一个间接层很容易:在你的主机上暴露一个容器端口,然后运行一个nginx实例或者一个防火墙FORWARD规则,把你想要的任何本地端口映射到该docker共享端口上。