Docker run挂载异常:容器内CSV文件无法持久化问题
解决Docker容器中Python脚本CSV文件丢失且宿主机无法查看的问题
问题核心
你的脚本读写的文件路径与挂载目录不匹配:
- 容器的
WORKDIR是/app,脚本bot.py在该目录下运行,若脚本用相对路径(比如./data.csv)写入文件,文件会被存在容器的临时存储层(/app目录),而非你挂载的/home/scripts/project目录。 - 容器重启后临时存储层的文件会被销毁;宿主机挂载目录未被写入,所以
cat查看始终为空。
解决方案
方案1:调整挂载路径,映射脚本输出目录到宿主机
如果脚本直接在/app目录下写CSV,修改docker run命令,将宿主机目录挂载到容器的/app目录:
docker run -d --shm-size=5g -v /home/scripts/project:/app image_name
注意:此操作会用宿主机
/home/scripts/project的内容覆盖容器/app目录原有内容,需先将bot.py、requirements.txt等文件放到宿主机对应目录,否则容器启动后找不到脚本。
如果脚本将CSV写到/app下的子目录(比如/app/output),可仅挂载该子目录,避免覆盖镜像中的脚本文件:
docker run -d --shm-size=5g -v /home/scripts/project:/app/output image_name
同时要确保脚本中的文件路径指向/app/output(比如./output/data.csv或绝对路径/app/output/data.csv)。
方案2:修改脚本输出路径到挂载目录
保持现有docker run命令不变,修改bot.py中的文件读写路径,将CSV文件写入容器的/home/scripts/project目录(比如使用绝对路径/home/scripts/project/data.csv),文件会自动同步到宿主机对应目录。
额外注意:权限问题
若遇到文件无法写入的情况,可能是宿主机目录权限导致。可在docker run命令中添加--user参数,用宿主机当前用户的UID/GID运行容器:
docker run -d --shm-size=5g --user $(id -u):$(id -g) -v /home/scripts/project:/app/output image_name
内容的提问来源于stack exchange,提问作者spirledaxis
相关产品推荐
相关产品推荐

