将 docker 卷移动到不同的分区

fmd*_*lle 13 ubuntu system docker partition docker-compose

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

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

$ docker-compose down
[17849] INTERNAL ERROR: cannot create temporary directory!
Run Code Online (Sandbox Code Playgroud)

因此,我检查了数据如何安装在服务器上:

$ 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
Run Code Online (Sandbox Code Playgroud)

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

我的问题是:

  • 有一个简单的解决方案可以增加可用空间 /,使用/dev/md4?

  • 或者我可以将卷移动到另一个地方而不丢失数据吗?

Zax*_*ful 18

Docker Daemon 的这一部分是可配置的。最佳做法是更改数据文件夹;这可以通过操作系统级 Linux 命令(如符号链接)来完成...我想说最好实际配置 Docker 守护进程以将数据存储在其他地方!

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

该文件应包含以下内容:

{
  "data-root": "/path/to/your/docker"
}
Run Code Online (Sandbox Code Playgroud)

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


Qoh*_*let 6

我来到这里是因为我遇到了同样的问题。尽管一些消息来源建议您可以使用符号链接来完成此操作,但这会导致各种问题。

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

是一个解决方案,但似乎不同版本略有不同。对我来说,解决方案是:

打开

/lib/systemd/system/docker.service
Run Code Online (Sandbox Code Playgroud)

并改变这一行

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
Run Code Online (Sandbox Code Playgroud)

到:

ExecStart=/usr/bin/dockerd -g /mnt/WHATEVERYOUR/PARTITIONIS/docker --containerd=/run/containerd/containerd.sock
Run Code Online (Sandbox Code Playgroud)

  • 我发现 ZaxLofful 的答案更好,因为它使用用户配置,而不是更改可能意外更新且更难找到的系统脚本。 (5认同)