ubuntu 将Docker卷移动到其他分区

r3i60tvu  于 2023-01-29  发布在  Docker
关注(0)|答案(4)|浏览(482)

我在一个服务器上运行了一些带有卷的容器。我所有的卷都在/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停止容器。
我的问题是:

  • 有一个简单的解决方案可以增加/中的可用空间,使用/dev/md4
  • 或者,我是否可以将卷移动到另一个位置而不丢失数据?
j2datikz

j2datikz1#

Docker守护程序的这一部分是可配置的。最佳实践是更改数据文件夹;这可以通过操作系统级别的Linux命令(如符号链接)来完成......我认为最好实际配置Docker守护进程,将数据存储在其他地方!
您可以通过编辑Docker命令行(例如,启动Docker守护进程的systemd脚本)或更改/etc/docker/daemon.json来完成此操作。
该文件应包含以下内容:

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

如果你添加了一个新的硬盘驱动器,分区,或者挂载点,你可以在这里添加它,docker会把它的数据存储在那里。

bxjv4tth

bxjv4tth2#

我降落在这里,因为我有非常相同的问题。即使一些消息来源建议你可以这样做的符号链接,这将导致各种问题。
根据操作系统和Docker版本,我有格式错误的图像,奇怪的错误或Docker守护进程拒绝启动。
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
7qhs6swi

7qhs6swi3#

我解决了它创建一个符号链接到一个更大的分区:

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

/scratch/docker_ meta是我在一个更大的分区中的文件夹。

cdmah0mi

cdmah0mi4#

执行绑定挂载。
例如,将/docker/volumes移动到/mnt/large
将行追加到/etc/fstab中。

/mnt/large /docker/volumes none bind 0 0

然后。

mv /docker/volumes/* /mnt/large/
mount /docker/volumes

如果您使用的是非根Docker,请不要首先忘记/mnt/largechownchmod

相关问题