多dockerWLS容器在同一台主机上,使其可以访问外部世界
我有一个Docker容器运行weblogic与我们的一些应用程序(EAR)部署。 当这些EAR中的每一个都开始时,它们将自己注册到外部服务pipe理器组件。 在注册时,提供了主机地址(使用InetAddress)和appPath(来自servlet上下文)。 因此,对于服务pipe理器组件,应用程序可用为= http:// {hostAddress}:/ {appPath} /。 当不同的应用程序用户想要访问应用程序时,他们会咨询服务pipe理器并获取端点。
现在,要启动这个工作,我必须在启动weblogic容器时执行下列操作之一
- 使用–net = host选项或
- 设置 – 名称=并暴露与-p 7001:7001的weblogicpipe理员端口
只有这样才能从外部访问应用程序。 如果我没有使用这些选项中的任何一个,则http:// {hostAddress}:/ {appPath} /中的{hostAddress}将被replace为容器的主机名,然后应用程序无法从外部访问
但是这造成了一个问题,因为现在我不能在主机上运行多个WebLogic容器。 有没有办法解决这个问题,我们将运行多个weblogic容器的实例,同时仍然允许外部世界到达他们?
当然。 你有几个select:
-
您可以在不同的端口上公开服务。 例如,如果您运行的第一个包含在主机端口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
启动一个容器-p 172.16.1.100:7001:7001
和第二个容器-p 172.16.1.101:7001:7001
。
使用haproxy会有意义吗? 例如,您可以训练haproxy作为任何ip:port上的第一个“weblogic”应用程序运行。 然后,你可以用标准的方式创build容器,暴露随机的端口。 您可以使用haproxy通过url的path映射这些端口。 就像是:
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.当你添加应用程序时,你需要重新configurationhaproxy(我没有想到通过),但外部configuration将保持不变。
使用这种技术,您可以创build多个绑定到相同后端循环方式的应用程序。
-G