在 Docker 容器中提供 quarkus 本机可执行文件的密钥库文件/路径

问题描述 投票:0回答:1

我是 quarkus 和 Docker 的新手,所以这可能是一个简单的问题,但不幸的是文档在这里没有帮助我。

我的 quarkus 微服务被编译为本机可执行文件,然后编译为 docker 映像,需要使用机密。

我遵循了这个文档: https://quarkus.io/guides/config-secrets

尤其是KeyStore部分。现在缺少的部分信息是密钥库文件应该所在的位置。我猜他们假设它位于 quarkus 项目的根目录中,因为配置如下:

smallrye.config.source.keystore."properties".path=properties
只给出“属性”作为路径。

如果您将密钥库文件(称为属性)放入项目的根目录中,它确实可以工作。

但在我看来,当您按照说明构建本机可执行文件时,此密钥库文件会构建到 docker 映像中

 quarkus build --native --no-tests -Dquarkus.native.container-build=true -DDquarkus.container-image.build=true

以及之后的 docker 镜像。

docker build -f src/main/docker/Dockerfile.native-micro -t quarkus/keystore-test .

现在我不想将我的秘密“硬编码”存储在我的 docker 镜像中。

那么我如何告诉 quarkus 密钥库文件将在运行时的特定位置提供给容器呢?我已经尝试设置了

smallrye.config.source.keystore."properties".path=/some/local/path

到 quarkus 项目之外的某个路径。它确实有效并且可以编译,但密钥库文件似乎位于映像内,因为从该位置删除密钥库文件并重新启动容器后,应用程序仍然知道密钥库文件中的值。

那么我们如何提供容器在启动时获取的外部密钥库文件?

docker quarkus keystore quarkus-native
1个回答
0
投票

好吧,在阅读了有关 docker 的更多内容并摆弄之后,我发现了一些有用的东西。

在我的 application.properties 文件中,我指定了一些主机上不存在的组成路径:

smallrye.config.source.keystore."properties".path=/my/made/up/path/properties.jks

然后我像往常一样构建本机可执行文件和 docker 映像。如果我现在按照生成的 Dockerfile 中的文档建议启动它(src/main/docker/Dockerfile.native-micro)

docker run -i --rm -p 8080:8080 quarkus/keystore-test

正如我所料,我得到了一个错误

Failed to load config value of type class java.lang.String for: my.secret

现在,当我像这样启动 docker 容器时传递卷挂载时

docker run -v /actual/path/on/your/host/properties.jks:/my/made/up/path/properties.jks -i --rm -p 8080:8080 quarkus/keystore-test

容器拾取它并且 quarkus 可以访问它。 如果我删除“/actual/path/on/your/host/properties.jks”并重新启动容器,它会按预期失败。

但我认为这些东西可以成为 Docker 文件的一部分,因此可能有一些方便的方法来做到这一点“quarkus 方式”。也许不是。

这至少有效。不过,仍然感谢更多答案。

© www.soinside.com 2019 - 2024. All rights reserved.