我必须将自定义根证书添加到 docker 环境中的 Java 信任库。所以我在我的 dockerfile 中添加了以下命令:
RUN $JAVA_HOME/bin/keytool -import -file /opt/custom/certs/mycert.pem -alias mycert -keystore $JAVA_HOME/jre/lib/security/cacerts -trustcacerts -storepass changeit -noprompt
构建 docker 映像时,我得到以下输出:
Step 10/10 : RUN $JAVA_HOME/bin/keytool -import -file /opt/custom/certs/mycert.pem -alias mycert -keystore $JAVA_HOME/jre/lib/security/cacerts -trustcacerts -storepass changeit -noprompt
---> Running in cbc2a547797e
Certificate was added to keystore
keytool error: java.io.FileNotFoundException: /opt/java/openjdk/jre/lib/security/cacerts (No such file or directory)
The command '/bin/sh -c $JAVA_HOME/bin/keytool -import -file /opt/custom/certs/mycert.pem -alias mycert -keystore $JAVA_HOME/jre/lib/security/cacerts -trustcacerts -storepass changeit -noprompt' returned a non-zero code: 1
我对以下事实感到困惑:
- 输出
Certificate was added to keystore
似乎表明成功执行keytool
- 同时,我得到
keytool error
一个非零返回码,所以没有成功 - 声称不存在的文件,实际上存在(可能是访问问题吗?)
我检查过的内容:
%JAVA_HOME
似乎可用,因为错误消息显示正确的路径- 当我在没有上述
RUN
命令的情况下构建映像时,然后在 docker 容器内发出完全相同的命令,它可以完美运行 - 我检查了与
/bin/sh
外壳相同的使用,以确保它不是外壳 - 工作 - 不依赖于当前目录,因为所有路径都是绝对的
现在我没有更多的想法如何追踪这个问题。