Ubuntu环境构建Docker镜像时找不到requirements.txt的问题求助
问题排查与解决
报错信息
ERROR: Could not open requirements file: [Errno 2] No such file or directory: 'requirements.txt'
已尝试的操作
- 初始写法:
COPY requirements.txt . - 修改后的写法:
COPY requirements.txt /tmp/requirements.txt RUN python -m pip install -r /tmp/requirements.txt
目录结构
DIR - Docker docker-compose.yml SUB-DIR DevEnv Dockerfile.dev requirements.txt SUB-DIR Headless_Services Dockerfile.ultron_ms requirements.txt
相关配置文件内容
docker-compose.yml
(注:原内容重复三次,以下为修正后的精简版本)
version: '3' services: python1: build: context: ./Headless_Services dockerfile: Dockerfile.ultron_ms container_name: Jarvis-UltronBot volumes: - /root/ultron:/ultron command: > sh -c " . /venv/bin/activate && tail -f /dev/null " python2: build: context: ./Headless_Services dockerfile: Dockerfile.ultron_ms container_name: Ultron-AlgoRoutine volumes: - /root/ultron:/ultron command: > sh -c " . /venv/bin/activate && tail -f /dev/null "
Dockerfile.dev
FROM python:3.9 RUN apt-get update && \ apt-get install -y curl && \ curl -fsSL https://code-server.dev/install.sh | sh && \ code-server --install-extension ms-azuretools.vscode-docker && \ code-server --install-extension ms-python.python && \ code-server --install-extension ms-python.vscode-pylance && \ code-server --install-extension ms-toolsai.jupyter && \ code-server --install-extension ms-toolsai.jupyter-keymap && \ code-server --install-extension ms-toolsai.jupyter-renderers && \ code-server --install-extension ms-toolsai.vscode-jupyter-cell-tags && \ code-server --install-extension ms-toolsai.vscode-jupyter-slideshow && \ code-server --install-extension slightc.pip-manager WORKDIR /app COPY requirements.txt . RUN virtualenv venv && \ . /venv/bin/activate && \ pip install --upgrade pip && \ pip install -r requirements.txt CMD ["bash"]
Dockerfile.ultron_ms(原错误版本)
FROM python:3.9-slim # Install dependencies RUN apt-get update \ && apt-get install -y screen virtualenv \ && virtualenv venv \ && . /venv/bin/activate \ && pip install --upgrade pip \ && pip install -r requirements.txt # Create app directory WORKDIR /app COPY requirements.txt . RUN virtualenv venv && \ . /venv/bin/activate && \ pip install --upgrade pip && \ pip install -r requirements.txt CMD ["bash"]
问题根源与修复方案
核心问题
Dockerfile.ultron_ms中存在两个致命问题:
- 依赖安装顺序错误:第一个
RUN命令就尝试执行pip install -r requirements.txt,但此时还未通过COPY将本地的requirements.txt复制到镜像中,必然会触发文件找不到的错误。 - 冗余操作:重复执行
virtualenv venv创建虚拟环境,完全没必要。
修正后的Dockerfile.ultron_ms
FROM python:3.9-slim # 安装系统依赖并清理缓存,减小镜像体积 RUN apt-get update \ && apt-get install -y screen virtualenv \ && rm -rf /var/lib/apt/lists/* # 设置工作目录 WORKDIR /app # 先复制requirements.txt,利用Docker缓存优化构建速度(仅当文件内容变化时才重新安装依赖) COPY requirements.txt . # 创建虚拟环境并安装Python依赖 RUN virtualenv venv && \ . /venv/bin/activate && \ pip install --upgrade pip && \ pip install -r requirements.txt CMD ["bash"]
额外说明
- 构建上下文验证:docker-compose中设置的
context: ./Headless_Services是正确的,因为requirements.txt和Dockerfile.ultron_ms在同一目录下,COPY命令可以正常读取到该文件。 - 缓存优化:将
COPY requirements.txt步骤放在依赖安装之前,当文件内容未变更时,Docker会复用之前的缓存层,无需重新执行依赖安装,大幅提升构建效率。
内容的提问来源于stack exchange,提问作者Mr.Riply
相关产品推荐
相关产品推荐

