主机磁盘满时如何配置Docker容器使用其他驱动器存储
问题核心原因
你遇到的空间不足报错和Deluge写入临时文件的逻辑、Docker容器存储机制直接相关:
- linuxserver版Deluge默认会将下载过程中的临时缓存、种子会话状态、未完成分片数据写入容器内
/tmp目录 - 你的现有compose配置仅映射了
/config和/downloads两个路径,/tmp属于容器的可写层,默认存储在宿主机/var/lib/docker/overlay2/对应的系统盘分区下,和你执行docker-compose up命令时所在的工作目录没有任何关系,所以换目录启动服务不会解决问题。
解决方案(全流程可通过Portainer操作)
两个问题先给出明确结论:
- 完全可以通过Portainer完成配置,让容器临时数据写入你挂载的1TB CIFS驱动器,不需要额外在宿主机敲命令
- 单独为容器的
/tmp路径添加卷映射,完全足以解决当前的空间不足报错,是改动最小、风险最低的方案。
方案1:单独映射/tmp目录(推荐优先使用)
这个方案不需要调整Docker全局配置,不会影响其他运行中的容器,操作步骤如下:
- 提前在宿主机CIFS挂载盘下创建临时文件目录,比如
/mnt/sbox1/docker/deluge/tmp,确保UID/GID为1001的用户对该目录有读写权限 - 打开Portainer,在容器列表找到正在运行的deluge容器,先点击停止按钮
- 点击容器操作栏的「Duplicate/Edit」按钮进入编辑页
- 下拉页面找到「Volumes」配置块,点击「Add volume」新增挂载项
- 挂载类型选择
Bind mount,「Host path」填写你刚创建的宿主机目录/mnt/sbox1/docker/deluge/tmp,「Container path」填写/tmp - 确认其他配置和原有配置一致后,点击页面下方的「Deploy the container」重新部署容器即可
部署完成后,Deluge所有写入
/tmp的临时数据都会直接落到1TB的CIFS盘上,不会再占用系统盘空间。
方案2:修改Docker全局存储路径(适合多容器大容量场景)
如果你希望后续所有容器的可写层数据都默认存储到大容量盘,也可以通过Portainer修改Docker daemon配置:
- 先在大容量本地存储(注意不要直接放CIFS上,避免元数据损坏)创建Docker数据目录,比如
/mnt/sdb/docker-data - 打开Portainer左侧菜单,进入「Settings」-「Environments」,选中你当前使用的本地Docker环境
- 找到Docker daemon配置编辑框,添加
"data-root": "/mnt/sdb/docker-data"配置项 - 保存配置后,需要在宿主机执行
systemctl restart docker重启服务生效,重启后Docker会自动迁移现有镜像、容器数据到新路径,操作前请备份重要的容器配置数据。
注意事项
- 由于你使用CIFS作为存储盘,挂载时建议添加参数
uid=1001,gid=1001,file_mode=0777,dir_mode=0777,mfsymlinks,避免出现权限不足、符号链接创建失败的问题 - 不要把Docker全局的data-root目录设置在CIFS共享上,CIFS不支持完整的POSIX文件语义,容易出现镜像损坏、容器启动失败的问题,单独映射
/tmp到CIFS完全可以满足Deluge的使用需求。
内容的提问来源于stack exchange,提问作者Stelios Papamichail
相关产品推荐
相关产品推荐

