You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Docker容器中的Quarkus原生程序提供外部密钥库文件?

解决Quarkus原生Docker镜像加载外部密钥库文件的方法

1. 确保构建时不将密钥库文件打包进镜像

  • 把密钥库文件移出Quarkus项目的src/main/resources目录(或任何会被构建复制到镜像的目录),放在本地项目外的独立路径,比如~/secrets/properties。
  • 检查pom.xml的资源配置,排除密钥库文件避免被打包:
    <build>
      <resources>
        <resource>
          <directory>src/main/resources</directory>
          <excludes>
            <!-- 若之前将密钥库放在resources目录,添加此规则排除 -->
            <exclude>properties</exclude>
          </excludes>
        </resource>
      </resources>
    </build>
    
  • 确认src/main/docker/Dockerfile.native-micro没有复制密钥库文件的命令,保持仅复制原生可执行程序的逻辑:
    FROM quay.io/quarkus/quarkus-micro-image:2.0
    WORKDIR /work/
    RUN chown 1001 /work \
        && chmod "g+rwX" /work \
        && chown 1001:root /work
    COPY --from=builder /project/target/*-runner /work/application
    EXPOSE 8080
    USER 1001
    CMD ["./application", "-Dquarkus.http.host=0.0.0.0"]
    

2. 配置容器内的密钥库挂载路径

在application.properties中设置容器内的固定路径(比如/config/properties),同时用环境变量传递密钥库密码避免硬编码:

smallrye.config.source.keystore."properties".path=/config/properties
smallrye.config.source.keystore."properties".password=${KEYSTORE_PASSWORD}

3. 运行容器时挂载外部密钥库文件

使用Docker的-v参数将本地密钥库文件挂载到容器内的指定路径,同时传入密码环境变量:

# 替换为你本地的密钥库路径和实际密码
docker run -d \
  -p 8080:8080 \
  -v /your/local/path/to/properties:/config/properties \
  -e KEYSTORE_PASSWORD=your-keystore-password \
  quarkus/keystore-test

可选:动态指定密钥库路径

如果需要灵活切换密钥库位置,无需修改application.properties,直接用环境变量覆盖配置即可:

docker run -d \
  -p 8080:8080 \
  -v /another/path/to/keystore:/external/secrets/keystore \
  -e smallrye.config.source.keystore."properties".path=/external/secrets/keystore \
  -e smallrye.config.source.keystore."properties".password=your-password \
  quarkus/keystore-test

内容的提问来源于stack exchange,提问作者Dantel35

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 11:17:07