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 命令。软链接本身只是一个指向其他文件或目录的特殊文件,因此删除软链接不会影响实际的文件或目录。下面是如何删除软链接的步骤:

  1. 确认软链接的位置:首先确认你要删除的软链接的位置。你可以使用 ls -l 命令来查看软链接的信息。例如:

    ls -l /path/to/symlink
  2. 删除软链接:使用 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 格式:

  1. 格式化磁盘,更改文件系统为 xfs 或 etx4
  2. 挂载磁盘
  3. 按上述步骤再做一遍软链接

我还是先移动回来吧,买了新的硬盘再说!

# 删除软链接
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

posted @   Zenith_Hugh  阅读(615)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示

喜欢请打赏

扫描二维码打赏

微信打赏