如何在Docker中部署带SSL的Tomcat Web应用,配置REST API并交付镜像
部署带SSL配置的Tomcat Web应用Docker镜像
下面是完整的实操步骤,覆盖SSL证书生成、Tomcat配置、Docker镜像构建全流程:
1. 生成SSL证书
先创建自签名证书(生产环境请替换为可信CA签发的证书),使用JDK自带的keytool工具:
keytool -genkeypair -alias tomcat -keyalg RSA -keysize 2048 -storetype PKCS12 -keystore localhost.p12 -validity 3650
执行命令后按提示输入证书密码、组织信息等,务必记住设置的密码,后续配置Tomcat会用到。生成的localhost.p12就是我们需要的证书文件。
2. 配置Tomcat启用SSL
修改server.xml
找到Tomcat默认的conf/server.xml,注释掉原有HTTP Connector(可选,也可保留用于跳转),添加HTTPS Connector:
<!-- 注释默认HTTP端口(可选) --> <!-- <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> --> <!-- 添加HTTPS Connector --> <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true"> <SSLHostConfig> <Certificate certificateKeystoreFile="/usr/local/tomcat/conf/localhost.p12" type="RSA" certificateKeystorePassword="你的证书密码" certificateKeystoreType="PKCS12"/> </SSLHostConfig> </Connector>
将certificateKeystorePassword替换为你生成证书时设置的密码。
强制HTTPS跳转(可选)
如果需要把所有HTTP请求自动跳转到HTTPS,修改conf/web.xml,在</web-app>标签前添加:
<security-constraint> <web-resource-collection> <web-resource-name>Entire Application</web-resource-name> <url-pattern>/*</url-pattern> </web-resource-collection> <user-data-constraint> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint> </security-constraint>
3. 构建Docker镜像
创建Dockerfile,将配置文件、证书和war包整合到镜像中:
# 基于官方Tomcat 9 + JDK 11镜像 FROM tomcat:9-jdk11 # 复制SSL证书到Tomcat配置目录 COPY localhost.p12 /usr/local/tomcat/conf/ # 替换Tomcat的server.xml配置 COPY server.xml /usr/local/tomcat/conf/server.xml # 替换web.xml以启用HTTPS强制跳转(如果不需要可删除此行) COPY web.xml /usr/local/tomcat/conf/web.xml # 复制你的Web应用war包到Tomcat的webapps目录 # 若要替换默认ROOT应用,可将war包命名为ROOT.war COPY your-app.war /usr/local/tomcat/webapps/ # 暴露HTTPS端口 EXPOSE 8443 # 启动Tomcat CMD ["catalina.sh", "run"]
将your-app.war替换为你的实际war包文件名,确保Dockerfile和证书、配置文件、war包在同一目录下。
执行构建命令:
docker build -t tomcat-ssl-app:v1 .
4. 运行并验证
启动容器:
docker run -d -p 8443:8443 tomcat-ssl-app:v1
验证方式:
- 浏览器访问
https://localhost:8443/your-app(如果war包是your-app.war),自签名证书会触发安全提示,确认后即可访问应用 - 用
curl测试REST API:
curl -k https://localhost:8443/your-app/api/xxx
-k参数用于跳过自签名证书的验证,生产环境可去掉。
生产环境注意事项
- 不要使用自签名证书,改用Let's Encrypt等可信CA签发的免费证书,或购买商业证书
- 证书密码不要硬编码在配置文件中,可通过Tomcat的加密功能或环境变量传递
- 根据实际业务调整Tomcat的线程数、连接超时等参数
内容的提问来源于stack exchange,提问作者Arpit
相关产品推荐
相关产品推荐

