我正在基于以下图像运行一个容器:
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
容器运行,但我无法访问管理控制台。
我正在使用windows11作为主机。
由于WebSphere的网络工作方式,无法将容器端口重新映射到任意主机端口。
默认情况下,WebSphere将使用服务器的defaulthost或defaulthostrongecure端点的serverindex.xml中的端口向客户端发送重定向响应。如果您进行任何类型的端口映射(如Docker,甚至通过Web服务器进行反向代理(,并且WebSphere发出重定向,则重定向到的URL将具有错误的端口(来自serverindex.xml的端口,而不是您用于通过Web服务器通话的端口(,并且重定向将失败。
为了解决这个问题,WebSphere容器映像是开箱即用配置的,其中设置了一些属性,以使重定向将端口包括在请求的Host标头中,这是您作为客户端实际向其发出请求的端口(请参阅https://www.ibm.com/docs/en/was-nd/8.5.5?topic=configuration-web容器自定义属性#从请求主机头第一次返回端口号(。
但是,一旦WebSphere开始信任Host标头的端口,它就会开始使用该端口将传入请求与虚拟主机主机别名关联起来。在容器映像中,WebSphere的default_host具有*:9080、*:9443、*:80和*:443的主机别名,因此映射到default_host的应用程序可以由任何主机名和任何这些端口访问,甚至可以通过Web服务器访问。类似地,admin_host虚拟主机(管理控制台配置为使用它(具有*:9043和*:9060的别名。但是,其他端口不会为它们定义主机别名。
您需要使用wsadmin将适当的虚拟主机配置为具有要映射容器以在主机上使用的特定端口的主机别名。(本页告诉如何操作(。因此,在您的示例中,您必须向admin_host添加一个新主机别名,为主机名指定*,为端口指定8500,向default_host添加新主机别名为主机名和端口指定8600。请注意,在多个虚拟主机上,不能将同一host:port组合作为主机别名。