"RUN pip install -r requirements.txt"无法工作。

3

我对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

1
我认为是因为您将requirements.txt放在子目录ToDoApp/ToDoApp/中,或者,如果该子目录不存在,则将其重命名为ToDoApp/ToDoApp - 9769953
1
请注意,您的ADD命令使用相对目录,而WORKDIR使用绝对目录。除非您的Docker工作目录首先是/,否则我认为这不正确。 - 9769953
可能这个可以帮到你:this - Shanteshwar Inde
我的 requirements.txt 文件在 ToDoApp 中,所以我将其添加到了 Dockerfile 中的 ToDoApp/ToDoApp。你认为这个文件应该放在哪里? - Aarti Joshi
执行 WORKDIR /ToDoApp/ToDoApp 并尝试 - Jibin Mathews
@JibinMathews 出现错误:ERROR: 服务“web”构建失败:无法创建目录:/ToDoApp/ToDoApp不是一个目录。 - Aarti Joshi
2个回答

11
我看到了几个问题:
  • 你使用的ADD命令创建了一个名为ToDoApp/ToDoApp的文件,甚至没有创建子目录。
  • ADD是不必要的(你没有从tar文件中提取或从URL下载),因此可以改用COPY。
  • 你需要复制你的代码。
  • RUN命令可以重新排序以获得更好的缓存效率。
  • 正确使用相对路径和WORKDIR。
  • 在使用json语法时需要分隔参数。

最终的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"]

0

试试这个:

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"]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接