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

Docker容器运行失败:Spring Boot无法找到p12密钥文件

解决方案:Spring Boot Docker容器中读取P12证书文件失败

问题根源

  1. 路径无效:本地开发时src/main/resources/keys/uploadfiles.p12是文件系统真实路径,但Docker运行阶段仅复制了打包后的JAR包,容器内不存在src目录,直接引用该路径必然失败。
  2. JAR内资源访问方式错误:方式二中通过ClassLoader.getResource转File的逻辑仅适用于本地文件系统,JAR包内的资源并非独立文件,其URI格式为jar:file:/app/app.jar!/keys/uploadfiles.p12,无法映射为本地文件路径,因此转File会报错。

修复步骤

1. 修改Java代码,用输入流读取JAR内的P12资源

GoogleCredential支持通过输入流加载P12文件,替换原代码为:

@Bean
public GoogleCredential googleCredential() throws GeneralSecurityException, IOException {
    // 获取资源输入流
    try (InputStream p12InputStream = getClass().getClassLoader().getResourceAsStream("keys/uploadfiles.p12")) {
        if (p12InputStream == null) {
            throw new IOException("未找到P12证书文件:keys/uploadfiles.p12");
        }
        return new GoogleCredential.Builder()
                // 保留原有其他配置(如setTransport、setJsonFactory等)
                .setServiceAccountPrivateKeyFromP12InputStream(p12InputStream)
                .build();
    }
}

2. 确认Maven打包包含P12文件

检查项目pom.xml,默认配置会自动包含src/main/resources下所有文件,无需额外修改,确保keys/uploadfiles.p12能被打包进JAR。

3. 验证Docker构建流程

当前Dockerfile的构建阶段已复制src目录,Maven打包时会将P12文件纳入JAR,运行阶段仅需复制JAR包即可,无需调整Dockerfile。

4. 重新构建运行

执行命令重新构建镜像并启动服务:

docker-compose build
docker-compose up

内容的提问来源于stack exchange,提问作者Văn Thuận Nguyễn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 01:10:04