【发布时间】:2018-11-21 13:26:10
【问题描述】:
我有一个 Docker 卷直接安装到 /usr/local/share/ca-certificates -文件夹。
certificate-folder:/usr/local/share/ca-certificates:ro
我正在使用 Tomcat 进行此设置,但其他框架也可能遇到类似问题。 Dockerfile 的基础是这样的:
FROM tomcat:8.5-jre8
# other Dockerfile configuration
CMD ["/start.sh"]
start.sh 包含关键行
#!/usr/bin/env bash
update-ca-certificates
# other startup related tasks
catalina.sh run
此设置的问题在于,只要我以 root 用户身份运行容器,它就可以工作。但是,如果我尝试在 Dockerfile 末尾使用类似这样的方式更改为指定用户
ENV TOMCAT_USER="tomcat" \
TOMCAT_UID="8080" \
TOMCAT_GROUP="tomcat" \
TOMCAT_GID="8080"
RUN groupadd -r --gid $TOMCAT_GID $TOMCAT_GROUP && \
useradd -r --uid $TOMCAT_UID --gid $TOMCAT_GID $TOMCAT_USER
RUN chown -R $TOMCAT_USER:$TOMCAT_GROUP /usr/local/tomcat
USER $TOMCAT_USER
所以:
- 由于 shell 脚本以 $TOMCAT_USER 身份运行,因此无法运行“update-ca-certificates”来安装证书。
- 由于 Dockerfile 中没有添加证书,因此无法在 Dockerfile 中运行 update-ca-certificates。
因此,我最终会遇到这样的 SSL 问题
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed:
sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
如果我仍希望将容器作为指定的 $TOMCAT_USER 运行,那么解决此类问题的正确方法是什么?
【问题讨论】:
标签: docker ssl tomcat ssl-certificate dockerfile