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共享端口上。