启动容器后,是否可以动态公开docker ports ?
如果没有,实现这样的目标的最佳做法是什么?
用例如下: 我需要暂时公开Java JMX Port以配置某个应用程序,然后关闭这些端口(从容器中),而不实际关闭JMX服务或修改Java应用程序。
由于
答案 0 :(得分:1)
从未找到过动态打开端口的方法。
打开静态端口并在容器内启动/停止转发到JMX端口的隧道会有帮助吗? 想到了socat或ssh,例如
ssh -L<static-sourceport>:<targetserver>:<jmx-targetport> localhost
答案 1 :(得分:1)
这是一个有趣的用例。我假设你的意思是“发布动态的docker ports”。如果是这样,您可以查看类似grand ambassador模式的内容,您可以执行以下操作:
启动您的java / jmx容器,只有一个静态暴露端口(没有发布到主机)。
打开你的大使容器,暂时发布你的jmx端口。
完成后,请移除您的大使。
答案 2 :(得分:1)
使用Weave network for Docker您的应用程序可能打开的任何端口都可以从网络内部访问,无需外部干预,这与前面提到的大使模式不同。但是,这些只能从应用程序所在的子网访问。您静态公开的端口也将由Docker保持NAT状态,并且可以从外部访问,但暂时只能在内部使用。