2

我必须将自定义根证书添加到 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外壳相同的使用,以确保它不是外壳 - 工作
  • 不依赖于当前目录,因为所有路径都是绝对的

现在我没有更多的想法如何追踪这个问题。

4

2 回答 2

1

这可能是一个权限问题,我猜是您使用的基本映像从 root 更改了用户,您需要成为 root 才能访问该文件。您应该能够执行以下操作:

USER root
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
USER originaluser

您可以使用以下方法找到原始用户:

docker history yourbaseimagename:tag
于 2021-06-29T17:31:30.440 回答
0

原来问题是我的错™️

有几件事让我感到困惑:

  1. keytoolCertificate was added to keystore即使实际上失败了也会显示- 愚蠢
  2. 我检查了该命令是否在 docker 容器中工作,但我错过了我正在测试以不同方式安装 Java 的另一个版本的图像
  3. Java 密钥库并不总是位于同一路径中——可能是$JAVA_PATH/lib/security/cacerts也可能是$JAVA_PATH/jre/lib/security/cacerts——显然取决于安装的是 JRE 还是 JDK

所以我的解决方案是编写一个 bash 脚本:

  1. Java 版本是 9 还是更好?然后使用-cacerts将自动处理密钥库位置的选项导入
  2. 否则:该$JAVA_HOME/jre目录是否存在?然后使用-keystore $JAVA_PATH/jre/lib/security/cacerts
  3. 其他:使用-keystore $JAVA_PATH/lib/security/cacerts
于 2021-06-30T11:06:01.563 回答