Docker 升级失败:aufs 存储驱动程序不再受支持

Docker 升级失败:aufs 存储驱动程序不再受支持

我有一台安装了 Docker 的 Ubuntu 机器。(Ubuntu 版本是 20.04,但这也影响 18.04,也可能影响非 LTS 版本。)将软件包升级docker.io到当前版本focal-security失败:

Preparing to unpack .../docker.io_20.10.7-0ubuntu1~20.04.1_amd64.deb ...
The aufs storage-driver is no longer supported.
Please ensure that none of your containers are
using the aufs storage driver, remove the directory
/var/lib/docker/aufs and try again.
dpkg: error processing archive /var/cache/apt/archives/docker.io_20.10.7-0ubuntu1~20.04.1_amd64.deb (--unpack):
 new docker.io package pre-installation script subprocess returned error exit status 1
dpkg: error while cleaning up:
 installed docker.io package post-installation script subprocess returned error exit status 1

这是一个已知错误,但该错误已被标记为“无法修复”,因为Ubuntu Docker 包装政策

这里引用多人的话:

这是一个重大的更新变化,不应该在 LTS 版本上发生。

需要如此多手动干预的升级绝不应该在 LTS 版本中发生。

在一般情况下,您说的没错。但不幸的是,Docker 是个例外。(…)

因此,作为 Docker 的一个例外,我们更新到较新的上游版本时无需担心 Docker 本身行为的向后兼容性,而是完全依赖上游的决定。在这种情况下,仅基于其他人已经提出的分析,这意味着我们不希望自己将 aufs 存储驱动程序修补回我们的包装中。(…)

根据现行政策,这不是我们期望修复的问题,因此我将这个错误标记为“无法修复”。

我觉得这个理由很令人困惑——如果我使用的是稳定发行版,我希望升级是无缝的,我不希望拥有最新版本的程序。如果我想要滚动发布,我知道在哪里可以找到它,而且它不会被称为 LTS。但这不是讨论的场所。

我的问题是,我接下来该怎么做?我如何“确保我的容器都没有使用 aufs 存储驱动程序”?保留旧的、未维护的 Docker 版本是行不通的。我需要进行安全更新。

我的所有容器均未使用依赖于存储驱动程序的高级功能。我非常乐意升级或迁移我的容器。我该怎么做?

答案1

来自官方 Docker 文档- 如何配置您的存储驱动程序以使用OverlayFS而不是AUFS

  1. 停止 Docker。

    sudo systemctl stop docker
    
  2. 将内容复制/var/lib/docker到临时位置。

    cp -au /var/lib/docker /var/lib/docker.bk
    
  3. 编辑/etc/docker/daemon.json。如果尚不存在,请创建它。假设该文件为空,请添加以下内容。

    {
       "storage-driver": "overlay2" 
    }
    

    如果 daemon.json 文件包含格式错误的 JSON,Docker 将无法启动。

  4. 启动 Docker。

    sudo systemctl start docker
    
  5. 验证守护进程是否正在使用 overlay2 存储驱动程序。使用 docker info 命令并查找存储驱动程序和支持文件系统。

    $ docker info
    
    Containers: 0
    Images: 0
    Storage Driver: overlay2
     Backing Filesystem: xfs
     Supports d_type: true
     Native Overlay Diff: true
    <...>
    

Docker 现在正在使用overlay2存储驱动程序。

然后,您需要重新创建容器并使用新的存储驱动程序再次获取所有图像。使用“绑定挂载”映射的容器数据应保持不变(这是指向 Docker 文件系统之外的数据的挂载,而不是卷 -请参阅此处了解更多信息)。

此后,您可以删除该目录/var/lib/docker/aufs并继续升级 Docker 包。

答案2

请注意如果你已经将数据目录移动到了其他位置(即通过data-root中的“ ”选项) ,那么在继续安装软件包之前daemon.json你需要删除两个 aufs 目录,一个在新目录下data-root,另一个在/var/lib/docker

相关内容