【发布时间】:2023-08-06 08:47:01
【问题描述】:
我必须将自定义根证书添加到 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作为外壳检查了相同的内容,以确保它不是外壳 - 工作 - 不依赖于当前目录,因为所有路径都是绝对路径
现在我不知道如何追踪这个问题了。
【问题讨论】:
-
我想我将不得不结束这个问题。在执行上述 RUN 命令之前,我的 docker build 中似乎存在问题。现在检查这个......