ubuntu 通过软链接的方式修改 Docker 镜像默认存储位置以防止空间占满
和之前的 修改 conda 存储位置一样,我们同样可以 通过软链接的方式,修改 存储位置。
前文:
https://www.cnblogs.com/odesey/p/17218519.html
https://www.cnblogs.com/odesey/p/17512848.html
默认情况下 Docker 容器的存放位置在 /var/lib/docker 目录下面,可以通过下面命令查看具体位置:
# 默认存放位置 sudo docker info | grep "Docker Root Dir" # 输出:Docker Root Dir: /var/lib/docker
解决默认存储容量不足的情况,最直接且最有效的方法就是挂载新的分区到该目录。但是在原有系统空间不变的情况下,所以采用软链接的方式,修改镜像和容器的存放路径达到同样的目的。
停掉 docker:
sudo service docker stop
移动整个/var/lib/docker目录到目的路径,这里我们不使用 mv
命令,使用如下命令:
参考:https://www.cnblogs.com/odesey/p/17502903.html
# /var/lib/docker:源目录, 请注意这里不是 /var/lib/docker/ sudo rsync -avz --progress --bwlimit=100000 /var/lib/docker /sas_3t
然后删除:/var/lib/docker
sudo rm -r /var/lib/docker # 你也可以用 rsync 命令来删除
建立软链接:
sudo ln -s /sas_3t/docker /var/lib/docker # /sas_3t/docker: 真的放了东西 # /var/lib/docker: 快捷方式
重启:
sudo service docker start
测试:
sudo docker images
ls -l
有什么用?
用于列出目录中的文件和子目录,并显示详细信息。例如:
ls -l /path/to/directory 输出包括: 文件类型和权限(如 -rwxr-xr-x) 链接数(即指向该文件的硬链接数) 文件所有者的用户名 文件所有者所属的组名 文件大小(以字节为单位) 最近修改时间 文件名
如何删除软链接?
sudo rm /var/lib/docker
要删除软链接(符号链接),你可以使用 rm
命令。软链接本身只是一个指向其他文件或目录的特殊文件,因此删除软链接不会影响实际的文件或目录。下面是如何删除软链接的步骤:
-
确认软链接的位置:首先确认你要删除的软链接的位置。你可以使用
ls -l
命令来查看软链接的信息。例如:ls -l /path/to/symlink -
删除软链接:使用
rm
命令删除软链接。例如,如果软链接的位置是/path/to/symlink
,你可以运行:rm /path/to/symlink
注意事项:
- 确保你删除的是软链接而不是实际文件。如果你不确定,使用
ls -l
命令检查软链接的目标。 - 如果你有多个软链接需要删除,可以一次性指定多个软链接路径:
rm /path/to/symlink1 /path/to/symlink2
这样,软链接会被删除,而不会影响到它指向的实际文件或目录。
可能遇到的问题:(后面已经弃用, 因为我的新硬盘是 etx4 格式了。 当然,后面的步骤应该也是可以这么做的!)
# Job for docker.service failed because the control process exited with error code. # See "systemctl status docker.service" and "journalctl -xe" for details.
我的启动不了,查看错误信息:
sudo dockerd --debug # ERRO[2023-07-08T20:14:20.939131329+08:00] failed to mount overlay: invalid argument storage-driver=overlay2 # ERRO[2023-07-08T20:14:20.939145577+08:00] [graphdriver] prior storage driver overlay2 failed: driver not supported
在这里:https://zhuanlan.zhihu.com/p/107643520 , 我找到了答案:
the overlay and overlay2 drivers are supported on xfs backing filesystems, but only with d_type=true enabled
也就是说,用 overlay2 驱动,必须是以 xfs 作为后端的文件系统。
原因:一开始我装了ubuntu 和 win10 双系统,/media/h/share(其实就是我的 windows 的 D 盘) 是 windows 下格式化,对应的文件系统格式是 ntfs。
df -h # 文件系统 容量 已用 可用 已用% 挂载点 # /dev/nvme0n1p4 242G 111G 132G 46% /media/h/share sudo blkid # /dev/nvme0n1p4: LABEL="xx" UUID="xx" TYPE="ntfs" PARTLABEL="Basic data partition" PARTUUID="xx"
解决方法 :再买一块硬盘,因为我的不太够用,格式化为 xfs
格式:
- 格式化磁盘,更改文件系统为 xfs 或 etx4
- 挂载磁盘
- 按上述步骤再做一遍软链接
我还是先移动回来吧,买了新的硬盘再说!
# 删除软链接 sudo unlink /var/lib/docker # 移动回来 sudo mv /media/h/share/ubuntu20.04/docker /var/lib/ # 重启成功 service docker start
我找到了一个解决方案:https://pdiway.com/articles/how-to-move-docker-data-directory/ ,可以让其在 NTFS 上运行。但是据说效率会低。
sudo vim /etc/docker/daemon.json # 会创建一个新文件
写入:
{ "data-root": "/var/lib/docker", "storage-driver": "devicemapper" }
重启:
service docker start # 成功了 docker ps # CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES sudo ls /var/lib/docker # 多出来一个文件夹:devicemapper
问题是:你的镜像又得重新拉一遍,因为是存到了 devicemapper 下面。
其他修改位置的方法:http://www.yunweipai.com/39771.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!