Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Docker:将证书插入存储_Java_Docker_Kubernetes_Openshift_Dockerfile - Fatal编程技术网

Java Docker:将证书插入存储

Java Docker:将证书插入存储,java,docker,kubernetes,openshift,dockerfile,Java,Docker,Kubernetes,Openshift,Dockerfile,我正在尝试将证书添加到我的Dockerfile上的$JAVA\u HOME/jre/lib/security/cacerts信任库中: FROM frolvlad/alpine-oraclejdk8:slim VOLUME /tmp RUN keytool -import -alias vault -storepass changeit -keystore $JAVA_HOME/jre/lib/security/cacerts -noprompt -trustcacerts -file /var

我正在尝试将证书添加到我的
Dockerfile
上的
$JAVA\u HOME/jre/lib/security/cacerts
信任库中:

FROM frolvlad/alpine-oraclejdk8:slim
VOLUME /tmp
RUN keytool -import -alias vault -storepass changeit -keystore $JAVA_HOME/jre/lib/security/cacerts -noprompt -trustcacerts -file /var/run/secrets/kubernetes.io/certs/tls.crt
ADD wseccloudconfig-0.0.1-SNAPSHOT.jar app.jar
RUN sh -c 'touch /app.jar'
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]
CMD ["keytool", "-import", "-alias", "vault", "-storepass", "changeit", "-keystore", "$JAVA_HOME/jre/lib/security/cacerts", "-noprompt", "-trustcacerts", "-file", "/var/run/secrets/kubernetes.io/certs/tls.crt"]
如您所见,我正在执行命令
keytool…
,以便将证书插入
cacerts

我正在将此映像部署到我的openshift/kubernetes集群中。一旦我连接到pod外壳,我就能够正确地运行这个
keytool…
命令。所以我的意思是,命令的格式很好。没有语法问题或相关问题

所以,我不希望这个命令的输出:
keytool-list-keystore$JAVA_HOME/jre/lib/security/cacerts
出现在我的证书中,但它没有出现

有什么想法吗

编辑

我也试着在
Dockerfile
中写这篇文章:

FROM frolvlad/alpine-oraclejdk8:slim
VOLUME /tmp
RUN keytool -import -alias vault -storepass changeit -keystore $JAVA_HOME/jre/lib/security/cacerts -noprompt -trustcacerts -file /var/run/secrets/kubernetes.io/certs/tls.crt
ADD wseccloudconfig-0.0.1-SNAPSHOT.jar app.jar
RUN sh -c 'touch /app.jar'
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]
CMD ["keytool", "-import", "-alias", "vault", "-storepass", "changeit", "-keystore", "$JAVA_HOME/jre/lib/security/cacerts", "-noprompt", "-trustcacerts", "-file", "/var/run/secrets/kubernetes.io/certs/tls.crt"]

就像有人在评论中已经说过的那样——如果您想使用部署时挂载的crt文件,您必须将keytool命令添加到部署中


您在构建容器时尝试访问的crt尚不存在。

在运行keytool命令之前,可能应该将文件
/var/run/secrets/kubernetes.io/certs/tls.crt
复制到容器中。这是不可能的。此文件(
tls.crt
)在装入卷时提供。它在构建时不可用。我也尝试过使用
CMD
。见后期版本。为什么证书不是jks格式@user10063942如果在构建时不可用,则keytool导入无法工作。修改您的入口点,使其成为一个脚本,首先导入证书,然后运行jar。我认为解决方案是添加
CMD
,而不是更改
ENTRYPOINT