将 docker 容器映像保存到与根目录不同的目录



我正在使用 Docker 18.09,我正在尝试为我的工作构建一些映像。问题是图像总是在根目录中,确切地说/var/lib/docker/overlay2/var/docker/.由于我的根目录中没有足够的空间,所以我想将此默认目录更改为我的另一个磁盘,但我在互联网上查看的解决方案都不适合我。

我已经经历了这些,但没有一个有效:

https://forums.docker.com/t/how-do-i-change-the-docker-image-installation-directory/1169

https://medium.com/@ibrahimgunduz34/how-to-change-docker-data-folder-configuration-33d372669056

如何更改 docker 镜像安装目录?

存储 docker 相关数据(容器、镜像等)的默认目录是/var/lib/docker

要覆盖此缺省位置,请使用 -g 选项。

在启动码头管理员守护程序时使用-g option.

dockerd -g /mnt/path/to/docker/dir

在您的情况下,最好的选择是在某个挂载点将一些外部存储连接到计算机。并在 -g 选项中提及该挂载点。

希望这有帮助。

更新:

-g option已弃用。使用--data-root选项。检查这个。

我在与rke2 一起使用的 containerd 时也遇到了类似的问题,我将 RKE2 与 containerd 一起使用,它将所有图像存储在/var/lib/rancher/rke2 上,这导致 VMs'/' 分区一直变满。 我想将 containerd 根目录移动到自定义目录

我在 rke 服务文件中更改了 rke 代理启动命令,它起作用了。

  1. 创建了一个新的 FS/containerdata/containerd 并配置了 rke 服务,以指向此目录以获取容器数据
  2. change/usr/local/lib/systemd/system/rke2-agent.service
ExecStart=/usr/local/bin/rke2 agent --data-dir /containerdata/containerd/
  1. Reload and retart rke2-agent.service
systemctl daemon-reload
systemctl restart rke2-agent.service
  1. 这可能会导致 Pod 不稳定,但系统会随着时间的推移而稳定。

当我也遇到这个问题时,我使用了以下技术,并且使用具有更大大小的不同文件系统是唯一可用的选项。

  1. 停止码头工人服务。 sudo systemctl stop docker.service

  2. 编辑 docker.service 文件以将新目录包含在 ExecStart 行中,如下所示。 ExecStart=/usr/bin/dockerd -g/u01/docker-H fd://--containerd=/run/containerd/containerd.sock

重新加载守护程序 sudo systemctl daemon reload

重启码头工人 sudo systemctl start docker.service

注意:docker.service 文件路径在您运行 systemctl stop docker.service 时显示

解决此问题的一个更简单直接的方法是,一旦移动现有文件夹,只需创建一个指向新路径的符号链接,如下所示。

sudo systemctl stop docker.service

sudo mv/var/lib/docker//

sudo ln -s//var/lib/docker

sudo systemctl start docker.service

Linux 的方法是创建一个从/var/lib/docker 到新位置的符号链接。

这是一个例子

sudo systemctl stop docker
sudo rsync -aqxP /var/lib/docker/ /mnt/docker
sudo rm -rf /var/lib/docker
sudo ln -s /mnt/docker /var/lib/docker
sudo systemctl start docker

最新更新