我的要求是手动将证书添加到容器中Java的击键操作中。为此,我正在使用以下命令。
ngOnInit() {
this.cat = 'cat';
}
->进入容器
sudo docker exec -it my-container-name bash
->更改目录到Java安全路径
cd /java/lib/security
->安装证书
以上命令运行正常。现在,我想通过詹金斯(Jenkins)使它自动化。我的意思是,我希望这些命令在之后执行
'keytool -keystore cacerts -storepass changeit -noprompt -trustcacerts -importcert -alias testcert -file /cert/test-Base64.cer
'。
任何人都可以帮忙。
答案 0 :(得分:0)
如果您仍想在容器启动后执行此操作,请使用
sudo docker exec -it my-container-name bash -c "cd /java/lib/security; keytool -keystore cacerts -storepass changeit -noprompt -trustcacerts -importcert -alias testcert -file /cert/test-Base64.cer"
答案 1 :(得分:0)
通常,您应该找到避免docker exec
的方法,尤其是对于这样的脚本使用。 (非常有可能的是,自动化任务将删除并重新创建容器,而无需您进行手动设置步骤。在Docker Swarm或Kubernetes等集群环境中,这是双重事实。)
如果您有一些现有的密钥库文件只想注入到容器中,最简单的方法是在启动时使用docker run -v
选项将其推入。您已经需要一个完全填充的密钥库文件。
docker run \
-v $PWD/keystore.jks:/usr/lib/java/jre/lib/security/keystore.jks \
...
如果在启动时无法注入完全填充的密钥库文件,则可以编写在容器启动时运行的脚本。它会寻找一些众所周知的目录,在其中的每个文件上运行keytool
命令,然后运行作为命令行参数传递的命令。
#!/bin/sh
if [ -d /cert ]; then
for f in /cert/*.cer; do
keytool ... -file "$f"
done
fi
exec "$@"
在您的Dockerfile中,复制此脚本并将其设为ENTRYPOINT。如果您以前有ENTRYPOINT ["java", ...]
行,请将其更改为CMD。看起来像
FROM java:8
...
COPY entrypoint.sh /app
ENTRYPOINT ["/app/entrypoint.sh"]
CMD ["java", "-jar", "/app/myapp.jar"]
然后,当您运行容器时,插入/cert
目录
docker run \
-v $PWD/cert:/cert \
...