繁体   English   中英

如何在 Docker 中使用 GCP 服务帐号 json 文件

[英]How to use GCP service account json files in Docker

我正在对接使用 Firebase 的 Fastapi 应用程序。 我需要访问service json文件,并且我已按如下方式配置了我的 docker 容器。

Dockerfile

FROM python:3.10-slim

ENV PYTHONUNBUFFERED 1

WORKDIR /app

# Install dependencies
COPY ./requirements.txt /requirements.txt
EXPOSE 8000

RUN pip install --no-cache-dir --upgrade -r /requirements.txt
   
RUN mkdir /env
# Setup directory structure
COPY ./app /app/app
COPY ./service_account.json /env
CMD ["uvicorn", "app.app:app", "--host", "0.0.0.0", "--port", "8000"]

Docker-compose 文件

version: "3.9"

services:
  app:
    build:
      context: .
    restart: always
    environment:
      - GOOGLE_APPLICATION_CREDENTIALS_CLOUDAPI=${GOOGLE_APPLICATION_CREDENTIALS_CLOUDAPI}
      - GOOGLE_APPLICATION_CREDENTIALS=${GOOGLE_APPLICATION_CREDENTIALS}
    volumes:
      - ./env:/env

volumes:
  env:

现在,当我运行docker-compose up -d --build容器失败并出现错误FileNotFoundError: [Errno 2] No such file or directory: '/env/service_account.json' 当我检查容器时,我可以看到ENV变量设置成功,如"GOOGLE_APPLICATION_CREDENTIALS=/env/service_account.json",所示。 现在为什么会失败?

你有context: . COPY./service_account.json /env

但是当你运行容器时,你有

volumes:
   - ./env:/env

这意味着您的 service_account 文件不在./env文件夹中,而是在它之外。

当你挂载一个卷时,它会替换容器内的目录,所以如果你需要一个本地env文件夹作为/env在容器中挂载,那么你应该将你的 JSON 文件移动到其他地方,例如/opt ( COPY./service_account.json /opt ),然后设置GOOGLE_APPLICATION_CREDENTIALS=/opt/service_account.json

如果你不需要整个文件夹,那么你只需要

volumes:
   - ./service_account.json:/env/service_account.json:ro

否则,将 JSON 文件移动到主机上的./env并更改COPY./env/service_account.json /env

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM