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

Quarkus项目Docker原生部署时SSL配置找不到JKS证书文件问题

问题根因

Quarkus原生编译产出独立可执行二进制,不会自动将jks这类外部资源文件打包进二进制。当前使用的Dockerfile仅复制了target/*-runner可执行文件到镜像的/work工作目录,未将srvdevrma1.jks证书文件复制到镜像内,应用启动时在工作目录找不到对应证书,直接抛出java.nio.file.NoSuchFileException。

可用解决方案

方案1:调整Dockerfile复制证书(改动最小,推荐测试/快速迭代场景用)

  • 确认srvdevrma1.jks存放路径,你当前放在src/main/resources目录(和application.properties同级)是符合规范的。
  • 修改src/main/docker/Dockerfile.native,在复制可执行文件的步骤后新增证书复制逻辑,把证书拷贝到镜像的工作目录:
FROM registry.access.redhat.com/ubi8/ubi-minimal:8.5
WORKDIR /work/
RUN chown 1001 /work \
    && chmod "g+rwX" /work \
    && chown 1001:root /work
COPY --chown=1001:root target/*-runner /work/application
# 新增以下行,复制证书到镜像工作目录
COPY --chown=1001:root src/main/resources/srvdevrma1.jks /work/

ENV TZ="America/Caracas"
EXPOSE 8080
USER 1001

CMD ["./application", "-Dquarkus.http.host=0.0.0.0"]
  • 原有application.properties里的证书路径配置srvdevrma1.jks不需要修改,因为证书直接放在应用工作目录下,相对路径可以正常识别。重新执行原生构建、镜像构建命令即可正常启动。

如果是生产环境不想把证书打进镜像,可以跳过Dockerfile修改,启动容器时直接挂载宿主机证书到容器工作目录:

docker run -i --rm -p 8080:8080 -v /宿主机证书存放路径/srvdevrma1.jks:/work/srvdevrma1.jks codigo-puk:v1

方案2:构建时将证书编入原生二进制(适合证书固定、不需要频繁替换的场景)

如果不想单独维护证书文件,可以调整配置让Quarkus在原生构建阶段把证书直接编入可执行文件:

  • 将srvdevrma1.jks移动到src/main/resources/META-INF/resources/目录下。
  • 修改application.properties内的证书路径配置,增加classpath前缀:
quarkus.http.ssl.certificate.key-store-file=classpath:META-INF/resources/srvdevrma1.jks
  • 重新执行./mvnw package -Pnative完成原生构建,不需要修改Dockerfile,直接构建镜像即可正常启动。
注意事项
  • 复制或挂载证书时,要保证容器内运行应用的1001用户对jks文件有读权限,否则会抛出权限拒绝错误。
  • 证书需要定期更换的场景优先选方案1,不需要重新编译原生二进制,替换证书成本更低。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 10:33:17