我正在运行一个基于以下映像的容器:
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作为主机。
发布于 2022-03-18 23:09:55
由于WebSphere的网络工作方式,无法将容器端口重新映射到任意的主机端口。
默认情况下,WebSphere将使用服务器的defaulthost或defaulthost_secure端点在serverindex.xml中的端口向客户端发送重定向响应。如果您执行任何类型的端口映射(比如Docker,甚至通过not服务器进行反向代理),并且WebSphere发出重定向,那么它重定向到的URL将有错误的端口(来自serverindex.xml的端口,而不是用于通过not服务器交谈的端口),则重定向将失败。
为了处理这个问题,WebSphere容器映像被配置为开箱即用,设置了一些属性以导致重定向,以便将端口包含在请求的主机头中,这是您作为客户端实际向其发出请求的端口(参见https://www.ibm.com/docs/en/was-nd/8.5.5?topic=configuration-web-container-custom-properties#returningtheportnumberfromtherequesthostheaderfirst)。
但是,一旦WebSphere开始信任主机头的端口,它就开始使用该端口将传入的请求与虚拟主机别名相关联。在容器映像中,WebSphere的default_host具有*:9080、*:9443、*:80和*:443的主机别名,因此映射到default_host的应用程序可以被任何主机名和任何端口访问,甚至可以通过even服务器访问。类似地,admin_host虚拟主机(管理控制台配置为使用)具有*:9043和*:9060的别名。但是,其他端口不会为它们定义主机名。
您需要使用wsadmin来配置适当的虚拟主机,以便为要映射容器以在主机上使用的特定端口拥有一个主机别名。(本页介绍如何)。因此,在您的示例中,您必须向admin_host添加一个新的主机别名,指定*作为主机名,8500用于端口,另一个新的主机别名为default_host,指定*用于主机名,8600用于端口。注意,您不能在多个虚拟主机上拥有与主机别名相同的主机:端口组合。
https://stackoverflow.com/questions/71533642
复制相似问题