【发布时间】:2016-02-02 10:38:51
【问题描述】:
我正在创建我的图像的实例,例如
docker run -P webmodule-xy
webmodule 的 Dockerfile 公开了一个端口(例如 8080)。
我现在的目标是获取可以通过 Java 从外部访问的映射/分配的端口号。是否有环境变量或类似的东西?
用例: webmodule-xy 应该在另一个 web 应用程序上注册自己并提供其 IP + 端口,以便其他应用程序稍后可以联系 webmodule-xy。 IP没问题,但是端口有问题。
我已经在 GitHub 上找到了这个open issue,但我不敢相信没有简单的解决方案。就像那里所说的那样,REST 不是一种选择:
允许容器访问 REST API 是有问题的。 一方面,REST API 是读/写的,如果您只需要 阅读您的端口映射,这是一个危险的权限级别 授予一个容器只是为了找出几个端口。
【问题讨论】:
-
我没有直接回答你的问题,但也许你可以使用 docker 链接来代替 (docs.docker.com/userguide/dockerlinks)。它允许多个 docker 容器以可移植的方式相互了解。如果可行,您可能需要重新设计应用程序的注册部分。
-
感谢您的建议!我已经知道链接并将它们用于例如数据库。不幸的是,我不能在我的用例中使用它们,因为这两个系统(模块和基础应用程序)应该是严格分离的。所以不应该假设它们在同一个 Docker 主机上运行。
-
是的,没错。我刚刚想到的一个技巧:您可以运行第二个容器,链接到
webmodule-xy并使用它来注册应用程序。之后就可以退出了。 -
实际上这个hack是行不通的,因为新图像会看到内部界面,而不是外部界面。
标签: java docker environment-variables