[英]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.