多dockerWLS容器在同一台主机上,使其可以访问外部世界

我有一个Docker容器运行weblogic与我们的一些应用程序(EAR)部署。 当这些EAR中的每一个都开始时,它们将自己注册到外部服务pipe理器组件。 在注册时,提供了主机地址(使用InetAddress)和appPath(来自servlet上下文)。 因此,对于服务pipe理器组件,应用程序可用为= http:// {hostAddress}:/ {appPath} /。 当不同的应用程序用户想要访问应用程序时,他们会咨询服务pipe理器并获取端点。

现在,要启动这个工作,我必须在启动weblogic容器时执行下列操作之一

  1. 使用–net = host选项或
  2. 设置 – 名称=并暴露与-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.100172.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