【问题标题】:How to enable AUFS on Debian?如何在 Debian 上启用 AUFS?
【发布时间】:2016-09-03 18:21:32
【问题描述】:

当我尝试通过以下方式安装 docker 时:

curl -sSL https://get.docker.com/ | sh

我收到消息:

警告:linux-image-extra-virtual 软件包不支持当前内核。我们没有 AUFS 支持。考虑安装软件包 linux-image-virtual kernel 和 linux-image-extra-virtual 以获得 AUFS 支持。

但是,Debian Jessie 上似乎都不存在这两个软件包:

# apt-get install linux-image-virtual linux-image-extra-virtual
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package linux-image-virtual
E: Unable to locate package linux-image-extra-virtual

我在这里错过了什么?

【问题讨论】:

    标签: docker debian gitlab-ci


    【解决方案1】:

    现代内核不支持aufs,因此您应该从aufs 跳到overlayfs。只需使用以下选项重新启动您的 docker 守护程序:

    --storage-driver=overlay2
    

    (或将此选项添加到 /etc/default/docker)

    在某些系统中,您应该通过创建 /etc/systemd/system/docker.service 的内容来添加文件 /etc/default/docker 的处理以启动程序:

    [Service]
    EnvironmentFile=-/etc/default/docker
    ExecStart=
    ExecStart=/usr/bin/docker daemon -H fd:// $OPTIONS \
          $DOCKER_STORAGE_OPTIONS \
          $DOCKER_NETWORK_OPTIONS \
          $BLOCK_REGISTRY \
          $INSECURE_REGISTRY \
          $DOCKER_OPTS
    

    更多信息here

    执行

    systemctl daemon-reload
    

    让更改生效。

    注意!您的所有图像都无法访问。如果您想保留它们,只需保存并重新加载它们。你可以找到很好的描述here

    UPD。我已将overlay 更改为overlay2,因为它解决的问题比here 描述的要多一些

    UDP。不相关,因为在现代版 docker (18-06) 中默认使用 overlay2

    【讨论】:

    • 截至目前(2017 年 1 月),overlayfs 尚未被视为生产就绪。请咨询docs.docker.com/engine/userguide/storagedriver/selectadriver
    • @itsafire 在这些页面上找不到有关生产准备情况的信息。您能否编辑您的链接,将锚点 (#) 添加到确切的章节?
    • 我添加了锚点,但没有可用的。阅读Future-proofing 或查找文本`Many people consider OverlayFS as the future... 在那里你会发现一个很好的图表,其中包含所有这些设备驱动程序的优缺点。
    • 哦,现在我明白了,对不起。但是我的答案的关键是aufs is not supported by modern kernels你可能会说有devicemapper,但是很多人更喜欢overlay,googleoverlay vs devicemapper
    • 原始问题的主题是关于 aufs 而不是 devicemapper。甚至即将推出的带有内核 4.8 的 debian 扩展也将通过 apt-get install aufs-dkms 安装它来支持 aufs。
    【解决方案2】:

    实际上,安装一个 stock jessie 会给你一个带有 aufs 支持的内核。我的猜测是您通过 jessie-backports 升级到更高的内核版本,这不是标准的 jessie 设置。

    这是用当前的 Debian jessie 8.7.1 amd64 和内核 3.16.0.4 测试的。

    # cat /etc/debian_version
    8.7
    # dpkg --get-selections | grep linux-image
    linux-image-3.16.0-4-amd64          install
    linux-image-amd64                   install
    
    # dpkg -L linux-image-3.16.0-4-amd64 | grep aufs
    /lib/modules/3.16.0-4-amd64/kernel/fs/aufs
    /lib/modules/3.16.0-4-amd64/kernel/fs/aufs/aufs.ko
    

    所以回答你的问题:

    您可以重新安装 Debian Jessie 或降级到默认内核,并且您有一个支持 aufs 的 jessie。

    要在 Debian 9 又名 Debian stretch 上安装 aufs,只需发出 apt-get install aufs-dkms。遗憾的是,目前 jessie-backports 无法使用此功能。

    在我们公司,我们正在使用 jessie aufs 设置来驱动我们的 docker 主机,并且一切都运行完美。

    08-2018 年更新

    即使是现在我也不建议将 overlay2 用于生产。我们目前有一个容器问题,当在具有 overlay2 存储的容器中运行时,mysql 无法创建 /var/run/mysqld.sock。

    截至 2018 年 8 月,此 one year old issue 已解决此问题。

    【讨论】:

      【解决方案3】:

      你可以试试

      sudo apt-get install linux-image-extra-$(uname -r)
      

      安装应包含 AUFS 支持的增强内核版本。

      【讨论】:

      • 这样的包好像不存在:packages.debian.org/jessie/linux-image-extra
      • 你是对的,我假设它类似于 Ubuntu。 uname -a 说明了什么?您尝试在哪个基础设施上运行 docker?一些虚拟化环境在 lxc / AUFS 业务方面存在问题。
      • uname -a 打印出Linux server.name 4.4.8-x86_64-jb1 #1 SMP Thu Apr 21 08:07:36 CEST 2016 x86_64 GNU/Linux。我不太确定我们的提供商使用什么,但服务器本身是虚拟的。
      • 这似乎是 Debian Jessie 已知的事情,根据我的阅读,AUFS 不包含在上游内核中。尝试mv /var/lib/docker/aufs /var/lib/docker/aufs_bk 并重新启动您的 Docker 守护进程。显然 Docker 足够聪明,可以使用来自 AUFS 的另一个文件系统。或者,您可以使用 --storage-driver 参数启动 Docker 守护程序以手动指定另一个。
      • 好吧,似乎 AUFS 并不是 Docker 真正需要的功能,因为 Gitlab CI 现在与 Docker 执行程序一起运行良好。我只是认为这会更干净一些。感谢您的努力!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-06
      • 2023-03-14
      • 2020-10-26
      • 1970-01-01
      • 1970-01-01
      • 2021-11-26
      • 1970-01-01
      相关资源
      最近更新 更多