GitHub Action构建Python容器时找不到requirements.txt的问题求助
问题排查:Docker构建时无法找到requirements.txt文件
核心问题分析
- Docker构建上下文错误:CI中使用
docker build - < Dockerfile命令,未指定构建上下文目录,导致Docker无法访问仓库内其他文件;同时Dockerfile里COPY ../requirements.txt .路径错误——requirements.txt与Dockerfile在同一目录,无需向上跳转。 - 镜像标签不匹配:构建镜像时未打标签,后续
docker run python:0.0.1找不到对应镜像。 - 容器内文件缺失:Dockerfile未复制
test目录到容器,执行CMD时会找不到测试文件。
具体修复步骤
1. 修改Dockerfile
FROM python:3.8-slim # 禁用Python生成.pyc文件 ENV PYTHONDONTWRITEBYTECODE=1 # 关闭输出缓冲,方便容器日志查看 ENV PYTHONUNBUFFERED=1 ENV PYTHONPATH='/workspaces/PROJ-2023-MLSERN' # 安装依赖工具并清理缓存 RUN apt-get update && apt-get install -y git gcc && rm -rf /var/lib/apt/lists/* WORKDIR /MLSERN # 修正COPY路径:直接引用同目录下的requirements.txt COPY requirements.txt . RUN python -m pip install --no-cache-dir -r requirements.txt # 复制测试目录到容器,确保CMD能找到测试文件 COPY test/ ./test/ # 若需要运行src目录代码,可添加:COPY src/ ./src/ # 创建非root用户并授权 RUN adduser -u 5678 --disabled-password --gecos "" appuser && chown -R appuser /MLSERN USER appuser CMD ["python", "test/test_file.py"]
2. 修改CI.yaml配置
on: push: pull_request: jobs: run-tests: strategy: fail-fast: false matrix: os: [ubuntu-latest] python-version: ["3.8"] name: Test runs-on: ${{matrix.os}} steps: - name: Checkout code uses: actions/checkout@v3 # 修正构建命令:指定仓库根目录为上下文,同时打镜像标签 - name: Build docker image run: docker build -t python:0.0.1 . # 运行已构建的镜像 - name: Run tests run: docker run python:0.0.1
3. 关键说明
- 构建上下文:
docker build .中的.代表以当前仓库根目录作为构建上下文,Docker可访问该目录下所有文件,COPY指令路径均基于此上下文。 - 镜像优化:合并apt-get命令并清理缓存,减少镜像层数与体积。
- 文件完整性:必须将容器运行所需的代码目录(如test、src)复制到容器内,否则会出现文件找不到的错误。
内容的提问来源于stack exchange,提问作者Xudong
相关产品推荐
相关产品推荐

