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

Docker化FastAPI应用时GCP服务账号JSON文件找不到问题排查

容器化FastAPI+Firebase应用时service_account.json文件找不到的问题分析

问题场景

将集成Firebase的FastAPI应用容器化时,已配置Dockerfile和docker-compose.yml,执行docker-compose up -d --build后容器启动失败,报错:

FileNotFoundError: [Errno 2] No such file or directory: '/env/service_account.json'

确认容器内环境变量GOOGLE_APPLICATION_CREDENTIALS=/env/service_account.json已正确设置。

核心原因

docker-compose.yml中配置的volumes: - ./env:/env会将宿主机的./env目录挂载到容器的/env目录,直接覆盖Dockerfile中通过COPY ./service_account.json /env复制到容器内的文件。如果宿主机本地的./env目录为空,或者没有放置service_account.json文件,容器内的/env目录就会变成空目录,导致找不到目标文件。

解决方法

方案一:移除不必要的目录挂载

如果不需要通过宿主机动态修改service_account.json,直接删除docker-compose.yml中的相关挂载配置:

# 删除以下内容
volumes:
  - ./env:/env

# 同时删除文件末尾的
volumes:
  env:

这样Dockerfile中复制的service_account.json会保留在容器的/env目录中,应用即可正常读取。

方案二:确保宿主机挂载目录存在目标文件

如果需要通过宿主机挂载来管理凭证文件,先在宿主机的./env目录下放入service_account.json文件,再执行容器启动命令。容器启动后,挂载的目录会包含该文件,应用就能正常访问。

方案三:调整挂载路径避免覆盖

修改docker-compose.yml的挂载路径,不覆盖Dockerfile中创建的/env目录,同时调整环境变量指向新路径:
比如挂载到/env-external:

environment:
  - GOOGLE_APPLICATION_CREDENTIALS=/env-external/service_account.json
volumes:
  - ./env:/env-external

同时将宿主机./env目录下的service_account.json放置好,这样既保留容器内原有目录,又能通过挂载获取外部凭证文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 13:48:22