我有一个运行weblogic的docker容器,部署了一些应用程序(EAR)。当这些EAR中的每一个启动时,它们都会使用外部服务管理器组件进行注册。在注册时,提供了主机地址(使用InetAddress)和appPath(来自servlet上下文)。因此,对于服务管理器组件,应用程序可用作= http:// {hostAddress}:/ {appPath} /。当不同的应用程序消费者想要访问应用程序时,他们会咨询服务管理器并获取端点。
现在,要使其工作,我必须在启动weblogic容器时执行以下操作之一
只有这样才能从外面访问应用程序。如果我不使用这些选项中的任何一个,则http:// {hostAddress}:/ {appPath} /中的{hostAddress}将替换为容器的主机名,然后无法从外部访问该应用程序
但这会产生一个问题,因为现在我不能在主机上运行多个WebLogic容器。有没有办法解决这个问题,我们会运行多个weblogic容器实例,同时仍允许外部世界访问它们?
答案 0 :(得分:1)
不确定。你有几个选择:
您可以在不同的端口上公开服务。例如,如果您运行的是第一个包含在主机端口7001上的(-p 7001:7001
),则可以在端口7002(-p 7002:7001
)上公开第二个容器,依此类推。
您可以将容器绑定到不同的主机IP地址。使用-p
发布端口时,可以提供端口应绑定到的特定主机地址。语法为-p <ip>:<hostPort>:<containerPort>
,因此假设您的主机在接口上分配了172.16.1.100
和172.16.1.101
个地址,您可以使用-p 172.16.1.100:7001:7001
启动一个容器,使用{启动第二个容器{1}}。
答案 1 :(得分:0)
使用haproxy会有意义吗?例如,你可以训练haproxy作为第一个weblogic&#39;应用于任何ip:端口。然后,您可以以标准方式创建容器,从而暴露随机端口。您可以使用haproxy通过url的路径映射这些端口。类似的东西:
frontend http_proxy
bind 192.168.1.1:7001
acl is_app1 path_beg -i /app1
acl is_app2 path_beg -u /app2
use_backend app1_server if is_app1
use_backend app2_server if is_app2
backend app1_server
mode http
server app_1 192.168.1.100:7002 check
backend app2_server
mode http
server app_2 192.168.1.100:7003 check
...
你会在主机端将haproxy暴露给7001.当你添加应用程序时,你需要重新配置haproxy(我还没想过),但外部配置会保持不变。
使用这种技术,您可以创建多个绑定到同一后端循环方式的应用程序。
-g