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 映像”