Docker镜像无法使用https和tomcat运行

4
我将尝试运行带有https URL的docker镜像,而不仅仅是http。该应用程序已部署在Tomcat中,并且我已经生成了其Docker镜像。当我在https URL上运行Tomcat时,它可以正常工作,但是当我构建Docker镜像并尝试运行该镜像时,URL无法工作。 Dockerfile
FROM tomcat:9.0.35

COPY conf/my-release-key.keystore /usr/local/tomcat/conf/my-release-key.keystore
COPY conf/server.xml /usr/local/tomcat/conf/server.xml
ADD webapps/placeholder-webapp.war /usr/local/tomcat/webapps/

EXPOSE 8080 8445
CMD ["catalina.sh","run"] 

server.xml

<Connector port="8445" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
           keystoreFile="conf/my-release-key.keystore" keystorePass="arcsight"
           clientAuth="false" sslEnabledProtocols="TLSv1.2,TLSv1.3" sslProtocol="TLS">
    </Connector>
    <!-- Define an AJP 1.3 Connector on port 8009 -->
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8445" />

运行Docker镜像的输出: 输入图像描述

在运行Docker镜像时我没有收到任何错误,但是在访问https://localhost:8445时我什么也看不到。

  • 我在浏览器上得到无法访问此网站的错误

请问您能否同时添加您的 server.xml 文件? - nischay goyal
只有端口8080被暴露出来了,Https端口也需要被暴露出来。 - wumpz
3个回答

1
你需要在Dockerfile中使用 EXPOSE 8445 暴露8445端口,并使用 -p 8445:8445 运行容器,将本地端口8445映射到容器内部运行的8445端口。
你的日志未显示tomcat知道它需要准备一个连接器来运行在8445端口上。它必须使用默认的 server.xml 配置。你需要使用类似以下的方法将你的 server.xml 提供给容器。 COPY server.xml /usr/local/tomcat/conf/

我尝试了你的解决方案!但我仍然收到“无法访问该网站”的错误 :( - user2128
可能是因为我使用的Tomcat镜像引起的吗? - user2128

0

您正在使用的端口,8445和8009应该在您的Dockerfile中使用EXPOSE打开。


是的,我已经暴露了这两个端口。我认为这可能是由于我在Dockerfile中使用的Tomcat版本引起的。 - user2128

0

你可以通过添加以下代码并将其复制到容器中的 COPY server.xml /usr/local/tomcat/conf/ 来在 server.xml 中启用 SSL。

<!--
  <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" />
-->

除了这个EXPOSE 8443之外,在Dockerfile中使用EXPOSE 8080,然后在https://localhost:8443上访问您的服务。


SSL已经启用!我正在使用端口8445,这是我在dockerfile的EXPOSE下设置的。 - user2128

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接