如何 运行 Websphere traditional in container on non-default port?

How to run Websphere traditional in container on non-default port?

我是运行一个基于下图的容器:

https://hub.docker.com/r/ibmcom/websphere-traditional

当我在容器和主机上使用相同的端口时一切正常,如下所示:

docker run --name test -h test -p 9043:9043 -p 9443:9443 -d ibmcom/websphere-traditional:latest

但如果我想像这样使用其他端口:

docker run --name test -h test -p 8500:9043 -p 8600:9443 -d ibmcom/websphere-traditional:latest

容器运行但我无法访问管理控制台。

我正在使用 windows 11 作为主机。

由于 WebSphere 网络的工作方式,无法将容器端口重新映射到任意主机端口。

默认情况下,WebSphere 将使用它在 serverindex.xml 中作为服务器默认主机或 defaulthost_secure 端点的端口向客户端发送重定向响应。如果您进行任何类型的端口映射(如 Docker 或什至通过网络服务器进行反向代理)并且 WebSphere 发出重定向,则重定向到的 URL 将具有错误的端口(来自 [=23 的端口) =],而不是您用来通过网络服务器进行通信的那个),重定向将失败。

为了解决这个问题,WebSphere 容器镜像配置了开箱即用的一些属性,设置为导致重定向将端口包含在请求的主机 header 中,这就是您要访问的端口实际上作为客户端发出请求(参见 https://www.ibm.com/docs/en/was-nd/8.5.5?topic=configuration-web-container-custom-properties#returningtheportnumberfromtherequesthostheaderfirst)。

但是,一旦 WebSphere 开始信任主机 header 的端口,它就会开始使用该端口将传入请求与虚拟主机主机别名相关联。在容器映像中,WebSphere 的 default_host 具有 *:9080、*:9443、*:80 和 *:443 的主机别名,因此映射到 default_host 的应用程序可以通过任何主机名和任何这些端口,甚至通过网络服务器。类似地,admin_host 虚拟主机(管理控制台配置使用)具有 *:9043 和 *:9060 的别名。但是,其他端口不会为它们定义主机别名。

您需要使用 wsadmin 配置适当的虚拟主机,以便为您要映射容器以在主机上使用的特定端口设置主机别名。 (this page tells how)。因此,在您的示例中,您必须向 admin_host 添加一个新的主机别名,为主机名指定 *,为端口指定 8500,并向 default_host 添加一个新的主机别名,为主机名指定 *,为端口指定 8600港口。请注意,您不能在多个虚拟主机上使用相同的 host:port 组合作为主机别名。