【问题标题】:Docker fails to start after install with "loopback attach failed"安装后 Docker 无法启动,并显示“环回附加失败”
【发布时间】:2018-07-15 22:29:49
【问题描述】:

我已经按照以下说明从存储库安装了 docker-ce:

https://docs.docker.com/install/linux/docker-ce/centos/

我在尝试启动 docker 时收到错误消息:

docker.service 的作业失败,因为控制进程以错误代码退出。详见“systemctl status docker.service”和“journalctl -xe”。

journalctl 有以下内容:

...
dockerd[3647]: time="2018-02-05T14:47:05-08:00" level=info msg="containerd successfully booted in 0.002946s" module=containerd
dockerd[3647]: time="2018-02-05T14:47:05.456552594-08:00" level=error msg="There are no more loopback devices available."
dockerd[3647]: time="2018-02-05T14:47:05.456585240-08:00" level=error msg="[graphdriver] prior storage driver devicemapper failed: loopback attach failed"
dockerd[3647]: Error starting daemon: error initializing graphdriver: loopback attach failed
systemd[1]: docker.service: main process exited, code=exited, status=1/FAILURE
systemd[1]: Failed to start Docker Application Container Engine.

我看过有关使用环回设备以外的其他设备的文章,但据我所知,这些文章表明要进行优化 - 并不意味着初始启动应该失败。

CentOS Linux 版本 7.4.1708(核心)

【问题讨论】:

  • centos7 上同样的问题
  • 你解决了吗?我在我的 debian XEN 服务器上的虚拟机中遇到了同样的问题
  • 看起来像一个错误。你在 Docker 项目上提交过问题吗? github.com/docker/for-linux

标签: docker centos centos7


【解决方案1】:

如果您在 Xen 上的 VM 中运行 Linux,则需要安装内核并使用 pygrub(请参阅https://wiki.debian.org/PyGrub)并更新到 docker 版本 19.03.0。

安装 pygrub

1。在你的虚拟机中执行:

mkdir /boot/grub
apt-get install -y linux-image-amd64
cat > /boot/grub/menu.lst << EOF

default         0
timeout         2

title           Debian GNU/Linux
root            (hd0,0)
kernel          /vmlinuz root=/dev/xvda2 ro
initrd          /initrd.img

title           Debian GNU/Linux (recovery mode)
root            (hd0,0)
kernel          /vmlinuz root=/dev/xvda2 ro single
initrd          /initrd.img

EOF

2。停止你的虚拟机,例如:

xen destroy vm01

3。编辑你的 xen 配置

例如,对于您的 DOM0 中的 VM /etc/xen/vm01.cfg(注释掉前两行并添加最后三行):

#kernel      = '/boot/vmlinuz-4.9.0-9-amd64'
#ramdisk     = '/boot/initrd.img-4.9.0-9-amd64'
extra       = 'elevator=noop'
bootloader  = '/usr/lib/xen-4.8/bin/pygrub'
bootloader_args = [ '--kernel=/vmlinuz', '--ramdisk=/initrd.img', ]

4。启动你的虚拟机:

xen create /etc/xen/vm01.cfg

【讨论】:

    【解决方案2】:

    我在同一台 Debian XEN 4.8 主机上的 Debian 9 VM 和 Debian 8 VM 中遇到同样的问题。

    环回似乎不存在:

    # losetup -f
    losetup: cannot find an unused loop device: No such device
    

    你可以用

    #!/bin/bash
    ensure_loop(){
      num="$1"
      dev="/dev/loop$num"
      if test -b "$dev"; then
        echo "$dev is a usable loop device."
        return 0
      fi
      echo "Attempting to create $dev for docker ..."
      if ! mknod -m660 $dev b 7 $num; then
        echo "Failed to create $dev!" 1>&2
        return 3
      fi
      return 0
    }
    ensure_loop 0
    ensure_loop 0
    

    但这只是寻找正确解决方案的提示,并没有完全解决,现在由于/dev/loop0存在,我有错误:

    Error opening loopback device: open /dev/loop0: no such device or address
    [graphdriver] prior storage driver devicemapper failed: loopback attach failed
    

    更新:

    我按照latest docs 中的说明安装了apt-get install docker-ce docker-ce-cli containerd.io,现在安装了最新版本:

    $ docker --version
    Docker version 19.03.0, build aeac9490dc
    

    还是同样的问题:

    failed to start daemon: error initializing graphdriver: loopback attach failed
    

    这是完整的日志:

    level=info msg="Starting up"
    level=warning msg="failed to rename /var/lib/docker/tmp for background deletion: rename /var/lib/docker/tmp 
    /var/lib/docker/tmp-old: file exists. Deleting synchronously"
    level=info msg="parsed scheme: \"unix\"" module=grpc
    level=info msg="scheme \"unix\" not registered, fallback to default scheme" module=grpc
    level=info msg="ccResolverWrapper: sending update to cc: {[{unix:///run/containerd/containerd.sock 0  <nil>}
    ] }" module=grpc
    level=info msg="ClientConn switching balancer to \"pick_first\"" module=grpc
    level=info msg="pickfirstBalancer: HandleSubConnStateChange: 0xc0005e8660, CONNECTING" module=grpc
    level=info msg="pickfirstBalancer: HandleSubConnStateChange: 0xc0005e8660, READY" module=grpc
    level=info msg="parsed scheme: \"unix\"" module=grpc
    level=info msg="scheme \"unix\" not registered, fallback to default scheme" module=grpc
    level=info msg="ccResolverWrapper: sending update to cc: {[{unix:///run/containerd/containerd.sock 0  <nil>}
    ] }" module=grpc
    level=info msg="ClientConn switching balancer to \"pick_first\"" module=grpc
    level=info msg="pickfirstBalancer: HandleSubConnStateChange: 0xc0007f5b10, CONNECTING" module=grpc
    level=info msg="pickfirstBalancer: HandleSubConnStateChange: 0xc0007f5b10, READY" module=grpc
    level=error msg="There are no more loopback devices available."
    level=error msg="[graphdriver] prior storage driver devicemapper failed: loopback attach failed"
    failed to start daemon: error initializing graphdriver: loopback attach failed
    

    更新 2:

    最后我发现,虚拟机中缺少 pygrub,这似乎是某个版本以来的新依赖。

    这个答案是一条死胡同,我添加了另一个答案,但我把这个留给其他用户,他们有不同的问题来获得一些提示。

    【讨论】:

    猜你喜欢
    • 2022-11-24
    • 2020-04-21
    • 1970-01-01
    • 1970-01-01
    • 2015-05-17
    • 2019-03-27
    • 2016-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多