Java 如何将证书和相应的密码文件传递给Docker
我是Docker的新手,虽然那里有大量的信息,但我不确定自己是否理解得足够透彻,无法破解我在这里提出的问题的正确解决方案。基本上,我有一个java app/jar文件,我想在docker容器中运行。基于internet上的一些示例,我创建了一个Dockerfile,如下所示:Java 如何将证书和相应的密码文件传递给Docker,java,linux,docker,certificate,containers,Java,Linux,Docker,Certificate,Containers,我是Docker的新手,虽然那里有大量的信息,但我不确定自己是否理解得足够透彻,无法破解我在这里提出的问题的正确解决方案。基本上,我有一个java app/jar文件,我想在docker容器中运行。基于internet上的一些示例,我创建了一个Dockerfile,如下所示: FROM openjdk:8-jdk-alpine ADD target/custom-app-1.0.0-SNAPSHOT.jar custom-app.jar ENTRYPOINT ["java", "-Xmx40
FROM openjdk:8-jdk-alpine
ADD target/custom-app-1.0.0-SNAPSHOT.jar custom-app.jar
ENTRYPOINT ["java", "-Xmx4096", "-Xms1024m", "-Djavax.net.ssl.trustStore=/etc/pki/java/trustKS.jks","-Djavax.net.ssl.trustStorePassword=$(cat /home/username/scripts/jks-password)", "-Djavax.net.ssl.trustStoreType=jks", "-Djavax.net.ssl.keyStore=/etc/pki/java/server_keystore.p12", "-Djavax.net.ssl.keyStorePassword=$(cat /home/username/scripts/server-password)", "-Djavax.net.ssl.keyStoreType=PKCS12", "-Dhttps.protocols=TLSv1.2", "-jar", "/custom-app.jar"]
在我传递到ENTRYPOINT命令的一些参数中,我指出了密钥库和信任存储文件的位置,以及保存各自密码/密码短语的相应文件
在docker中,让使用此映像的用户使用自己的密码传递自己的证书的最佳方式是什么?对于在单个节点(尤其是开发人员环境)上本地运行的容器,通常使用这些凭据从主机装载卷。例如
docker run -v /host/path/creds.pem:/container/path/creds.pem:ro your_image
如果您可以进入swarm模式,docker将秘密作为只读内存文件注入,该文件仅加密存储在管理器上,并存储在需要该秘密的工作人员的内存中。这可以简单到:
docker secret create creds /host/path/creds.pem
然后将容器作为服务运行:
docker service create --secret creds your_image
有关机密的更多详细信息,请访问:
为了再现性,我通常在编写文件中这样做。您可以在这里找到语法:谢谢您的回答。我有两个后续问题:我是否需要修改当前Dockerfile中的任何内容?由于每个信任库、密钥库、信任库密码和密钥库密码(共4个)都有一个单独的文件,如何装载它们?@Pr0pagate这一切都发生在运行时,因此Dockerfile中无需更改,只需确保它知道在何处查找您的文件。传递带有多个
-v
标志的多个单独文件,或者您可以装载整个目录。与此相关,如果我在docker-compose.yml文件中指定环境变量,是否可以将该环境变量作为参数读入Dockerfile中的ENTRYPOINT命令?我用“-Djavax net.ssl.keystrepassword=${KS_PASSWORD}”尝试了这个方法,但似乎不起作用。环境变量起作用,但需要一个shell来扩展它们。用于ENTRYPOINT
的Json/exec语法显式绕过shell并直接运行命令。典型的解决方案是运行一个shell脚本,即shell扩展脚本中的变量,最后一个命令以exec
开头,用您的命令替换shell。