Mut*_*shi 0 docker google-cloud-platform
我正在对使用 Firebase 的 Fastapi 应用程序进行 dockerizing。我需要访问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"]
Run Code Online (Sandbox Code Playgroud)
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:
Run Code Online (Sandbox Code Playgroud)
现在,当我运行容器时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
Run Code Online (Sandbox Code Playgroud)
这意味着您的 service_acccount 文件不在./env文件夹中,而是在文件夹之外。
当您挂载卷时,它会替换容器内的目录,因此如果您需要像容器中env一样挂载本地文件夹,那么您应该将 JSON 文件移动到其他位置,例如( ),然后设置/env/optCOPY ./service_account.json /optGOOGLE_APPLICATION_CREDENTIALS=/opt/service_account.json
如果您不需要整个文件夹,那么您只需要
volumes:
- ./service_account.json:/env/service_account.json:ro
Run Code Online (Sandbox Code Playgroud)
否则,将 JSON 文件移动到./env您的主机上并更改COPY ./env/service_account.json /env
| 归档时间: |
|
| 查看次数: |
1282 次 |
| 最近记录: |