Docker运行时无法找到文件问题求助(Python+Poetry项目)
解决Docker容器里文件找不到的问题
为啥会出这问题
报错说找不到/app/files/temp/config.yaml,说白了就是容器里这个路径下根本没这个文件,大概率是下面其中一种情况:
- 你本地项目里本来就没这个文件,构建镜像的时候自然也没复制进去;
- 文件在你本地电脑,但没挂载到容器对应的路径里;
- 你的代码根本没用到启动时传的
file参数,而是硬写死了要找/app/files/temp/config.yaml这个路径。
具体怎么修
情况1:文件是项目的一部分
如果files/temp/config.yaml是你项目代码里的文件:
- 先检查本地项目根目录有没有这个文件和对应的文件夹,没有的话先创建好;
- 重新构建镜像:
docker build -t my-app . - 再重新跑容器就行。
情况2:文件在本地电脑其他地方
如果文件在你本地的某个路径(比如~/my-config/config.yaml),得用Docker的挂载功能把本地文件映射到容器里的目标路径:
docker run --rm -it -v ~/my-config/config.yaml:/app/files/temp/config.yaml my-app path/to/file.ext
注意:把命令里的
~/my-config/config.yaml换成你本地实际的文件路径。
情况3:代码没处理传入的参数
打开你的应用代码(比如my_app/__main__.py或者app.py),看看是不是没用到启动时传的file参数:
- 现在代码里是硬写死找
/app/files/temp/config.yaml,得改成用传进来的参数; - 举个例子,修改
main函数:import sys def main(): if len(sys.argv) < 2: print("用法:python -m my_app <配置文件路径>") sys.exit(1) # 把传入的第一个参数作为配置文件路径 config_path = sys.argv[1] # 后面加载配置的时候用这个config_path就行
额外优化:Dockerfile可以改得更高效
为了让镜像构建更快、体积更小,建议调整下Dockerfile:
FROM python:3.10 WORKDIR /app # 安装curl后清理缓存,减小镜像体积 RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/* RUN curl -sSL https://install.python-poetry.org | python3 - ENV PATH=$PATH:/root/.local/bin # 先复制依赖文件,利用Docker缓存,下次改代码不用重新装依赖 COPY pyproject.toml poetry.lock ./ RUN poetry install --no-root # 再复制项目代码 COPY . . RUN poetry install ENTRYPOINT ["poetry", "run", "python", "-m", "my-app"]
内容的提问来源于stack exchange,提问作者UUserr09
相关产品推荐
相关产品推荐

