Docker 映像未使用 https 和 tomcat 运行

Posted

技术标签:

【中文标题】Docker 映像未使用 https 和 tomcat 运行【英文标题】:Docker image not running with https and tomcat 【发布时间】:2020-09-29 04:50:56 【问题描述】:

我正在尝试使用 https URL 而不是仅使用 http 来运行 docker 映像。该应用程序部署在 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 URL。 我收到浏览器无法访问此站点错误

【问题讨论】:

能否也添加您的server.xml 只暴露了8080端口。 Https 端口也需要暴露。 【参考方案1】:

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

【讨论】:

是的,我已经暴露了这两个端口。我认为这可能是由于我在 dockerfile 中使用的 tomcat 版本【参考方案2】:

能否通过添加以下代码在server.xml中启用SSL,然后将其复制到容器COPY server.xml /usr/local/tomcat/conf/

<!--
  <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 已启用!我正在使用我放在 dockerfile 的 EXPOSE 下的端口 8445。【参考方案3】:

您需要在 Dockerfile 中使用EXPOSE 8445 公开端口 8445,并使用-p 8445:8445 运行容器,以将本地端口 8445 映射到容器内运行的端口 8445。

您的日志没有显示 tomcat 知道它需要准备一个连接器才能在端口 8445 上运行。它必须使用默认的 server.xml 配置。您需要使用以下内容将 server.xml 提供给容器。

COPY server.xml /usr/local/tomcat/conf/

【讨论】:

我应用了您的解决方案!但我仍然收到无法访问网站的错误:( 可能是因为我使用的是tomcat镜像吗?

以上是关于Docker 映像未使用 https 和 tomcat 运行的主要内容,如果未能解决你的问题,请参考以下文章

如何在未配置的 Docker 上为 centos 7 删除/安装 docker 映像

如何使用未提交的本地证书文件通过 GitHub 操作构建 Docker 映像

AWS Elastic Beanstalk Docker 来自 ECR 错误“Dockerrun.aws.json 中未指定 Docker 映像”

SCDF 未获取最新的应用程序 docker 映像

来自 docker 映像的命令未传递到管道

未通过 ZAP API 扫描 docker 映像进行身份验证