多个docker WLS容器位于同一主机上,使外部世界可以访问它们

时间:2015-03-20 14:49:39

标签: docker

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

现在,要使其工作,我必须在启动weblogic容器时执行以下操作之一

  1. 使用--net = host选项或
  2. set --name =并使用-p 7001:7001
  3. 公开weblogic管理端口

    只有这样才能从外面访问应用程序。如果我不使用这些选项中的任何一个,则http:// {hostAddress}:/ {appPath} /中的{hostAddress}将替换为容器的主机名,然后无法从外部访问该应用程序

    但这会产生一个问题,因为现在我不能在主机上运行多个WebLogic容器。有没有办法解决这个问题,我们会运行多个weblogic容器实例,同时仍允许外部世界访问它们?

2 个答案:

答案 0 :(得分:1)

不确定。你有几个选择:

  • 您可以在不同的端口上公开服务。例如,如果您运行的是第一个包含在主机端口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启动一个容器,使用{启动第二个容器{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

相关问题