如何在Python+Docker环境中正确加载JSON文件?解决文件找不到错误
问题原因
容器内运行时,Python脚本的工作目录是/stockalert-app,而data.json实际位于/stockalert-app/app/目录下。本地运行时你是在app目录下执行脚本,相对路径data.json能找到文件,但容器里工作目录是上层目录,导致路径匹配失败。
解决方案
方案1:修改Python代码(推荐,跨环境通用)
通过获取脚本所在目录的绝对路径来拼接文件路径,确保无论在哪里运行都能找到data.json:
修改main.py代码:
import json import os def importData(fileName): # 获取当前脚本所在的绝对目录 script_dir = os.path.dirname(os.path.abspath(__file__)) # 拼接出文件的完整路径 file_path = os.path.join(script_dir, fileName) with open(file_path) as json_file: data = json.load(json_file) return data def main(): data = importData('data.json') print("Data: ") print(data) if __name__ == "__main__": main()
方案2:调整Dockerfile的工作目录
将容器的工作目录设置为app目录,这样相对路径就能匹配:
修改后的Dockerfile:
FROM python:3 # 将工作目录切换到app文件夹 WORKDIR /stockalert-app/app # 复制requirements.txt到上层目录(因为WORKDIR现在是app) COPY requirements.txt ../requirements.txt RUN pip3 install -r ../requirements.txt # 复制app目录下的所有文件到当前工作目录(即/stockalert-app/app) COPY ./app . CMD [ "python", "main.py" ]
方案3:修改CMD命令,执行前切换目录
保持原有Dockerfile不变,修改CMD命令,先进入app目录再执行脚本:
FROM python:3 WORKDIR /stockalert-app COPY requirements.txt requirements.txt RUN pip3 install -r requirements.txt COPY ./app ./app # 用shell命令先切换目录再执行python脚本 CMD [ "sh", "-c", "cd ./app && python main.py" ]
内容的提问来源于stack exchange,提问作者josSan
相关产品推荐
相关产品推荐

