将 docker 个卷移动到不同的分区

Move docker volume to different partition

我有一个服务器,我在其中 运行 一些带有卷的容器。我的所有卷都在 /var/lib/docker/volumes/ 中,因为 docker 正在管理它。我使用 docker-compose 来启动我的容器。

最近,我试图停止我的一个容器,但这是不可能的:

$ docker-compose down
[17849] INTERNAL ERROR: cannot create temporary directory!

所以,我检查了数据是如何安装在服务器上的:

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            7,8G     0  7,8G   0% /dev
tmpfs           1,6G  1,9M  1,6G   1% /run
/dev/md3         20G   19G     0 100% /
tmpfs           7,9G     0  7,9G   0% /dev/shm
tmpfs           5,0M     0  5,0M   0% /run/lock
tmpfs           7,9G     0  7,9G   0% /sys/fs/cgroup
/dev/md2        487M  147M  311M  33% /boot
/dev/md4        1,8T  1,7G  1,7T   1% /home
tmpfs           1,6G     0  1,6G   0% /run/user/1000

如您所见,/ 只有 20Go,所以它已满,我无法使用 docker-compose 停止我的容器。

我的问题是:

我解决了它创建一个符号 link 到更大尺寸的分区:

ln -s /scratch/docker_meta /var/lib/docker

/scratch/docker_meta 是我在更大分区中的文件夹。

我来到这里是因为我遇到了同样的问题。尽管一些消息来源建议您可以使用符号 link 来做到这一点,但这会导致各种问题。

根据 OS 和 Docker 版本,我遇到了格式错误的图像、奇怪的错误或 docker-daemon 拒绝启动。

Here 是一种解决方案,但似乎每个版本都有所不同。对我来说,解决方案是:

打开

/lib/systemd/system/docker.service

并更改此行

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

至:

ExecStart=/usr/bin/dockerd -g /mnt/WHATEVERYOUR/PARTITIONIS/docker --containerd=/run/containerd/containerd.sock

Docker 守护程序的这一部分是可配置的。最佳做法是更改数据文件夹;这可以通过 OS-level Linux 命令(如符号链接)来完成...我认为最好实际配置 Docker 守护程序以将数据存储在其他地方!

您可以通过编辑 Docker 命令行(例如启动 Docker 守护程序的 systemd 脚本)或更改 /etc/docker/daemon.json.

文件应包含以下内容:

{
  "data-root": "/path/to/your/docker"
}

如果您添加新的硬盘驱动器、分区或挂载点,您可以在此处添加它,docker 会将其数据存储在那里。