如何在Docker容器中使用plt.savefig()将图片保存到宿主主目录
Docker容器内matplotlib绘图保存到Ubuntu宿主目录操作方案
方法1:启动容器时配置绑定挂载(推荐长期使用)
这是最常用的持久化方案,挂载后容器内生成的文件会实时同步到宿主机,无需额外操作:
- 先在宿主机创建专门存储绘图的目录(也可以直接用现有主目录):
mkdir -p ~/docker_plots - 启动容器时添加
-v参数配置目录挂载,规则为-v 宿主机路径:容器内路径。假设你的matplotlib代码中,绘图保存的路径是容器内的/app/plots目录,启动命令示例:
注意:路径顺序不要写反,容器内路径必须和你代码里docker run -v ~/docker_plots:/app/plots 你的镜像名称plt.savefig()写的保存路径完全匹配,比如你代码写plt.savefig("/app/plots/折线图.png"),容器侧的挂载路径就要对应到/app/plots - 如果出现生成的图片只有root权限能访问的问题,启动时追加用户匹配参数即可:
docker run -v ~/docker_plots:/app/plots --user $(id -u):$(id -g) 你的镜像名称 - 容器运行完成后,直接打开宿主机的
~/docker_plots目录就能查看所有生成的绘图。
方法2:已运行完成的容器直接拷贝文件
如果容器已经运行结束,没有提前做挂载,可以直接把绘图从容器中拷贝到宿主机:
- 先查询对应容器的ID:
docker ps -a - 使用
docker cp命令拷贝文件,假设容器ID为abc123,容器内绘图存储在/app/plots目录,拷贝到宿主机主目录的命令为:docker cp abc123:/app/plots ~/docker_plots
代码侧注意事项
无GUI的Ubuntu服务器环境运行matplotlib需要提前设置无界面后端,否则会报错无法生成图片,代码开头添加如下配置即可:
import matplotlib matplotlib.use('Agg') # 必须在import pyplot之前设置 import matplotlib.pyplot as plt
保存图片时尽量写绝对路径,避免因工作目录不符导致文件找不到的问题。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

