将Docker存储引擎从devicemapper更改为overlay2

xmd2e60i  于 2023-04-11  发布在  Docker
关注(0)|答案(2)|浏览(399)

我在生产中有3个正在运行的容器。我必须将存储策略移动到overlay2。我已经提交了我的容器,并将这些提交的映像保存为tar文件。
现在我准备删除所有旧的docker内容,然后我将更改存储策略。
有没有人做过这个关键的操作?有没有建议在安全区域?

yhuiod9q

yhuiod9q1#

**注意:**由于图层的原因,您将无法访问所有当前镜像和容器!恢复您的更改将使您的旧镜像和容器再次可访问。您可以使用docker save IMAGE:TAG > IMAGE.tar.gz保存当前镜像,并使用docker load < IMAGE.tar.gz将其导入新的存储驱动程序。

请按照以下步骤操作:

  • 停止docker:*
sudo systemctl stop docker
  • 编辑文件/etc/docker/daemon. json(如果不存在则创建它)并将以下内容添加到文件中:*
{
  "storage-driver": "overlay2"
  }

启动docker:

sudo systemctl start docker

使用docker info验证存储驱动程序是否正在使用:

$ docker info
  ...
  Storage Driver: overlay2
  ...
ql3eal8s

ql3eal8s2#

我第一次尝试实现它得到了这个:

failed to start daemon: error initializing graphdriver: overlay2: the backing xfs filesystem is formatted without d_type support, which leads to incorrect behavior. Reformat the filesystem with ftype=1 to enable d_type support.

在我的例子中,这是我的根文件系统;我创建了一个新的文件系统,并在复制了内容并完成后将/var/lib/docker符号链接到新的挂载

sudo semanage fcontext -a -e /var/lib/docker /vm0/docker

虽然它没有直接接触卷内容,但所有关于如何配置正在运行的容器的记录都丢失了,例如网络,端口Map等。尝试使用其docker-compose文件重新创建其中一个容器会重新下载公共映像,然后继续损坏其完整的卷。
在另一个例子中,我导入了一个保存的图像,并在一个shell脚本中记录了它的调用,该脚本 Package 了“docker run....”-但失败了

docker: Error response from daemon: No command specified.

相关问题