【问题标题】:How to Pass in Certificates and Corresponding Password Files to Docker如何将证书和相应的密码文件传递给 Docker
【发布时间】:2019-06-13 20:48:41
【问题描述】:

我对 Docker 还很陌生,虽然那里有大量信息,但我不确定我是否理解到足以破译我在这里所问问题的正确解决方案。基本上,我有一个要在 docker 容器中运行的 java app/jar 文件。根据互联网上的一些示例,我创建了一个 Dockerfile,如下所示:

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 中,让使用此映像的用户使用自己的密码传递自己的证书的最佳方法是什么?

【问题讨论】:

    标签: java linux docker certificate containers


    【解决方案1】:

    对于在单个节点上本地运行的容器,尤其是开发人员环境,您通常使用这些凭据从主机安装卷。例如

    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
    

    有关秘密的更多详细信息,请访问:https://docs.docker.com/engine/swarm/secrets/

    为了重现性,我通常在撰写文件中执行此操作。你可以在这里找到语法:https://docs.docker.com/compose/compose-file/

    【讨论】:

    • 感谢您的回答。我有几个后续问题是:我需要修改当前 Dockerfile 中的任何内容吗?而且由于我对每个信任库、密钥库、信任库密码和密钥库密码都有一个单独的文件 - 总共 4 个,我如何安装所有这些文件?
    • @Pr0pagate 这一切都发生在运行时,所以除了确保它知道在哪里可以找到你的文件之外,Dockerfile 中没有什么可以改变的。传递多个带有多个 -v 标志的单个文件,或者您可以挂载整个目录。
    • 与此相关,如果我在 docker-compose.yml 文件中指定环境变量,是否可以将该环境变量作为 Dockerfile 中 ENTRYPOINT 命令的参数读取?我用“-Djavax-net.ssl.keyStorePassword=${KS_PASSWORD}”试过这个,但似乎没有用。
    • 环境变量可以工作,但您需要一个外壳来扩展它们。用于ENTRYPOINT 的 Json/exec 语法显式绕过 shell 并直接运行命令。典型的解决方案是运行一个shell脚本,作为一个shell扩展脚本中的变量,最后一个命令以exec开头,用你的命令替换shell。
    猜你喜欢
    • 1970-01-01
    • 2013-10-01
    • 2017-06-18
    • 2020-06-05
    • 2021-02-23
    • 1970-01-01
    • 2023-02-23
    • 2022-01-12
    相关资源
    最近更新 更多