【问题标题】:Docker build cannot install python requirements from file if python project is mounted in docker-compose如果 python 项目安装在 docker-compose 中,Docker build 无法从文件中安装 python 需求
【发布时间】:2022-01-26 04:08:44
【问题描述】:

我有一个从docker-compose.yml 运行的 python 图像。我将 python 代码挂载为一个卷,因此我不需要在每次代码更改时重建容器:

docker-compose.yml

services:
  python:
    container_name: py
    build: .
    volumes:
      - ./app:/usr/src/app
    env_file:
      - .env
    working_dir: /usr/src/app
    command: python ./core/main.py

其中build: . 指的是同一目录中的Dockerfile

app/ 是 python 根目录,包含标准的requirements.txt。问题是我无法在 docker build 期间使用 RUN pip install -r requirements.txt 中的 RUN pip install -r requirements.txt 安装依赖项在 requirements.txt 中,因为该卷尚未安装。

我似乎无法解决这个问题,这让我觉得我没有练习 docker/docker-compose 的最佳用法。

我该如何解决这个问题?

Dockerfile

FROM python:3.7.12-slim-bullseye
RUN mkdir /usr/src/app
WORKDIR /usr/src/app
RUN pip install -r requirements.txt
ENV PYTHONBUFFERED 1

正如预期的那样,运行docker compose build py 会导致:

ERROR: Could not open requirements file: [Errno 2] No such file or directory: 'requirements.txt' 

【问题讨论】:

  • 告诉我们你的Dockerfile
  • @KlausD。更新问题Dockerfile
  • 您需要在ENTRYPOINT 中包含pip install
  • 没有 Docker 的 Python 虚拟环境可能会成为更好的日常开发环境。如果您尝试使用主机代码运行未经修改的python 映像,Docker 只是在堆栈中间添加了一个您不想要的隔离层。
  • 在使用之前,您必须将COPYrequirements.txt 放入图像中。实际上,您并没有将任何内容复制到图像中。

标签: python docker docker-compose dockerfile requirements.txt


【解决方案1】:

而不是在 docker-compose 上这样做:

volumes:
      - ./app:/usr/src/app

我通常在 Dockerfile 中使用这种其他方法:

WORKDIR /usr/src/app #if folder doesn't exist this will be created, so you can omit RUN mkdir /usr/src/app
COPY ./app/requirements.txt /usr/src/app
RUN pip install -r requirements.txt

COPY ./app /usr/src/app

如果您在内部使用虚拟文件夹,则需要一个 .dockerignore 文件以避免容器中的空间消耗

【讨论】:

    猜你喜欢
    • 2019-10-07
    • 2022-06-21
    • 2019-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-15
    • 2018-08-04
    • 1970-01-01
    相关资源
    最近更新 更多