【问题标题】:'RUN pip install -r requirements.txt' not working'RUN pip install -r requirements.txt' 不起作用
【发布时间】:2019-04-24 09:37:37
【问题描述】:

我是 Docker 新手,正在尝试使用相同的方式部署 django 项目。但是在构建 docker-compose 之后,我收到了这个错误:

错误:无法打开需求文件:[Errno 2] 没有这样的文件或 目录:'requirements.txt' 错误:服务 'web' 未能构建: 命令“/bin/sh -c pip install -r requirements.txt”返回一个 非零码:1

我可能在设置正确路径时搞砸了,所以这是我的项目结构

~/Desktop/Projects/ToDoApp
   ToDoApp
     settings.py
   docker-compose.yml
   Dockerfile
   manage.py
   requirements.txt

这是我的 dockerfile

#pull official base image
FROM python:3

#set envionment variables
ENV PYTHONUNBUFFERED 1

# Adding requirements file
ADD requirements.txt ToDoApp/ToDoApp

#set work directory
WORKDIR /ToDoApp

#install dependencies
RUN pip install --upgrade pip
RUN pip install -r requirements.txt

CMD ["python", "./ToDoApp/manage.py runserver 0.0.0.0:8000"]

这是我的 docker-compose.yml

version: '3'

services:
  web:
    build: .
    command: python /ToDoApp/manage.py runserver 0.0.0.0:8000
    volumes:
        - .:/Desktop/Projects/ToDoApp
    ports:
        - "8000:8000"
    environment:
      - SECRET_KEY = please_change_me

【问题讨论】:

  • 我认为是因为您将requirements.txt 放在子目录ToDoApp/ToDoApp/ 中,或者如果子目录不存在,您将其重命名为ToDoApp/ToDoApp
  • 请注意,您的ADD 命令使用相对目录,而WORKDIR 使用绝对目录。除非您的 Docker 工作目录首先是 /,否则我认为这是不正确的。
  • this 可能会有所帮助
  • 我的 requirements.txt 在 ToDoApp 中,这就是我将它添加到我的 dockerfile 中的 ToDoApp/ToDoApp 的原因。你建议 thwefile 应该在哪里?
  • WORKDIR /ToDoApp/ToDoApp 并尝试

标签: python docker dockerfile


【解决方案1】:

我看到的几个问题:

  • 您使用的 ADD 命令会创建一个名为 ToDoApp/ToDoApp 的文件,它甚至不会创建子目录。
  • 不需要添加(您没有提取 tar 或从 URL 下载),因此可以切换到 COPY。
  • 您需要复制您的代码。
  • 可以对 RUN 命令重新排序以提高缓存效率。
  • 正确使用相对路径和 WORKDIR。
  • 使用json语法时需要分隔args

生成的 Dockerfile 如下所示:

FROM python:3

#set envionment variables
ENV PYTHONUNBUFFERED 1

# run this before copying requirements for cache efficiency
RUN pip install --upgrade pip

#set work directory early so remaining paths can be relative
WORKDIR /ToDoApp

# Adding requirements file to current directory
# just this file first to cache the pip install step when code changes
COPY requirements.txt .

#install dependencies
RUN pip install -r requirements.txt

# copy code itself from context to image
COPY . .

# run from working directory, and separate args in the json syntax
CMD ["python", "./manage.py", "runserver", "0.0.0.0:8000"]

【讨论】:

    【解决方案2】:

    试试这个:

    FROM python:3
    
    #set envionment variables
    ENV PYTHONUNBUFFERED 1
    
    #set work directory
    WORKDIR /ToDoApp
    
    # Adding requirements file
    ADD requirements.txt /ToDoApp/
    
    #install dependencies
    RUN pip install --upgrade pip
    RUN pip install -r requirements.txt
    
    CMD ["python", "./ToDoApp/manage.py runserver 0.0.0.0:8000"]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-30
      • 1970-01-01
      • 2019-12-23
      • 1970-01-01
      • 1970-01-01
      • 2012-10-01
      • 1970-01-01
      相关资源
      最近更新 更多