使用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
相关产品推荐
相关产品推荐

