Docker容器中相对路径读取文件报FileNotFoundError求助
解决Docker容器中相对路径读取配置文件失败的问题
问题原因
相对路径的解析完全依赖当前执行代码时的工作目录。本地运行时,你的工作目录是convertor文件夹,../config/config.json会正确指向项目根目录下的config文件夹;但在Docker容器中,WORKDIR被设置为/app,当你在这个目录下运行convertor里的代码时,../config会解析到/(/app的上级目录),而你的配置文件实际在/app/config,因此抛出找不到文件的错误。
解决方案
方案1:使用基于脚本位置的绝对路径(推荐)
修改代码,通过脚本自身的绝对位置来拼接配置文件路径,彻底摆脱工作目录的影响:
import os # 获取当前脚本所在目录的绝对路径 script_dir = os.path.dirname(os.path.abspath(__file__)) # 拼接配置文件路径:从脚本目录向上一级,再进入config文件夹 config_path = os.path.join(os.path.dirname(script_dir), "config", "config.json") with open(config_path) as json_config: # 处理配置逻辑
这种方式无论在本地还是Docker容器中运行,路径都会自动适配,是最稳定的解决方案。
方案2:调整Docker容器的工作目录
保持代码中的相对路径不变,修改Dockerfile,将工作目录切换到代码所在的convertor文件夹:
RUN mkdir /app COPY . /app WORKDIR /app/convertor # 后续运行代码的命令(比如 python your_script.py)
这样容器内的工作目录和本地一致,../config/config.json会正确指向/app/config/config.json。
方案3:修改代码中的相对路径(不推荐)
如果一定要在/app目录下运行代码,可以把路径改为./config/config.json,但这会导致本地运行时路径错误(本地工作目录是convertor,./config会指向convertor/config,而实际配置在上级目录),因此不建议使用。
内容的提问来源于stack exchange,提问作者Igal
相关产品推荐
相关产品推荐

