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

使用Docker Compose读取本地CSV文件时遇文件不存在错误求助

问题诊断与修复方案

核心问题1:文件名与路径完全不匹配

你的prepare.py代码中尝试读取/app/ranger_trainig_data.csv,但实际本地文件名为test.csv,即使通过挂载映射到容器/app目录,文件名也完全对应不上,这是触发FileNotFoundError的直接原因。

核心问题2:容器内文件的存在逻辑冲突

  • 你通过docker-compose.yml将本地根目录挂载到容器的/app,但prepare.py是在容器的/usr/src目录下运行的,且构建镜像时未将test.csv复制到容器内。
  • 如果依赖挂载获取文件,容器内test.csv的路径是/app/test.csv;如果想脱离挂载(让镜像内置文件),则需要在Dockerfile中添加复制命令。

次要问题:虚拟环境激活路径的潜在隐患

Dockerfile中设置PIPENV_VENV_IN_PROJECT=1,但Pipfile被复制到了容器根目录/,导致虚拟环境创建在/.venv。虽然当前激活命令能生效,但不符合项目内虚拟环境的规范,后续可能引发问题。


修复步骤

步骤1:修正prepare.py的文件路径

根据使用场景二选一:

  • 场景A:依赖挂载获取文件(适合开发时实时修改文件):
    import pandas as pd
    df = pd.read_csv("/app/test.csv")
    
  • 场景B:镜像内置文件(适合生产环境,不依赖外部挂载):
    import pandas as pd
    df = pd.read_csv("test.csv")  # 相对路径,对应容器内/usr/src/test.csv
    

步骤2:对应调整镜像构建逻辑(仅场景B需要)

在Dockerfile的COPY prepare.py .之后添加复制test.csv的命令:

COPY test.csv .

步骤3:优化虚拟环境配置(可选但推荐)

将Dockerfile中COPY Pipfile .移到WORKDIR /usr/src之后,确保Pipfile在项目目录下:

WORKDIR /usr/src

COPY Pipfile .  # 移到这里
RUN python3 -m pip install pipenv
RUN PIPENV_VENV_IN_PROJECT=1 PIPENV_NOSPIN=1 pipenv install --skip-lock
RUN pipenv graph

COPY model/ model
COPY prepare.py .
COPY test.csv .  # 场景B需要添加
COPY docker-entrypoint.sh .
RUN chmod +x docker-entrypoint.sh

然后修改docker-entrypoint.sh中的激活命令:

source ./.venv/bin/activate

内容的提问来源于stack exchange,提问作者user9532692

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 15:50:32