Docker动态暴露端口

5

在容器启动后,是否可以动态地暴露Docker端口?

如果不能,那么实现这样的功能的最佳方法是什么?

使用情况如下: 我需要短暂地暴露Java JMX端口以配置某些应用程序,然后关闭这些端口(从容器中),而不实际关闭JMX服务或修改Java应用程序。

谢谢

3个回答

1

从未找到动态打开端口的方法。

是否可以打开静态端口,并在容器内启动/停止一个转发到JMX端口的隧道。 socat或ssh可能有帮助,例如。

ssh -L<static-sourceport>:<targetserver>:<jmx-targetport> localhost

嗨,Christian,我认为@Abdullah的答案在大多数情况下对我来说都有效。谢谢。 - Sohail

1
这是一个有趣的用例。我猜你的意思是“动态地发布docker端口”。如果是这样,你可以考虑像 grand ambassador模式这样的东西,你可以这样做:
  1. 只使用静态暴露端口(没有发布到主机)启动你的java/jmx容器。

  2. 启动你的ambassador容器,它会临时发布你的jmx端口。

  3. 完成后,删除你的ambassador。


谢谢@Abdullah。我认为这对我有用。我正在考虑类似的概念并构建代理,需要时启动并在完成后删除。 - Sohail

1

使用Docker的Weave网络,应用程序打开的任何端口都可以从网络内部访问,无需外部干预,这与前面提到的ambassador模式不同。但是,这些端口只能在应用程序所在的子网中访问。您静态公开的端口也将由Docker进行NAT,并且可在外部访问,但是一旦进入内部,就只能在内部使用。


免责声明:我是Weave团队的一员。 - errordeveloper
谢谢@errordeveloper...这可能是最好的解决方案。 - Sohail

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接