You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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中存在两个致命问题:

  1. 依赖安装顺序错误:第一个RUN命令就尝试执行pip install -r requirements.txt,但此时还未通过COPY将本地的requirements.txt复制到镜像中,必然会触发文件找不到的错误。
  2. 冗余操作:重复执行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"]

额外说明

  1. 构建上下文验证:docker-compose中设置的context: ./Headless_Services是正确的,因为requirements.txt和Dockerfile.ultron_ms在同一目录下,COPY命令可以正常读取到该文件。
  2. 缓存优化:将COPY requirements.txt步骤放在依赖安装之前,当文件内容未变更时,Docker会复用之前的缓存层,无需重新执行依赖安装,大幅提升构建效率。

内容的提问来源于stack exchange,提问作者Mr.Riply

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 20:28:09