如何迁移 docker 以使用不同的存储驱动程序?

如何迁移 docker 以使用不同的存储驱动程序?

我有一台运行 docker 的服务器,使用 btrfs 存储驱动程序。如何将其迁移到使用其他存储驱动程序?我想使用 overlay2。

我尝试按照说明进行迁移这里

  • 停止docker

  • 重命名 /var/lib/docker 为 /var/lib/docker.bak

  • 将 {"storage-driver": "overlay2"} 添加到 /etc/docker/daemon.json

  • 将 /var/lib/docker.bak 复制到 /var/lib/docker (以“摆脱”任何 btrfs 快照)

  • 启动docker

但这次迁移之后,就不再存在任何容器了。

我猜测是因为目录中仍有数据/var/lib/docker/btrfs,而没有数据/var/lib/docker/overlay2(它们有不同的“布局”,将 btrfs 重命名为 overlay2 不行)。

如何从一个存储驱动程序迁移到另一个存储驱动程序,以便任何自动启动的容器仍然存在并自动启动?

答案1

子卷通常不需要大量的工作(理论上基于 Fedora 的 Btrfs 文档)——应该可以,rm -r /var/lib/docker/subvolumes/*但出于某种原因——docker黑暗的魔法——这不起作用。

TLDR:我使用了以下我找到的脚本关于这个要点删除所有子卷/var/lib/docker/btrfs/subvolumes

  • 我稍微修改了一下,以echo "Deleting: $subvolume"确保我不会烧毁整个系统

!在运行此操作之前,请确保您已将容器中的所有重要数据绑定到主机,因为接下来的操作将删除所有容器层。

for subvolume in /var/lib/docker/btrfs/subvolumes/*; do
    echo "Deleting: $subvolume"
    # Uncomment the next line after you've verified the list is correct.
    # btrfs subvolume delete $subvolume
done

相关内容