安装后 Docker 无法启动,并显示“环回附加失败”
Posted
技术标签:
【中文标题】安装后 Docker 无法启动,并显示“环回附加失败”【英文标题】:Docker fails to start after install with "loopback attach failed" 【发布时间】: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 【参考方案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,这似乎是某个版本以来的新依赖。
这个答案是一条死胡同,我添加了另一个答案,但我把这个留给其他用户,他们有不同的问题来获得一些提示。
【讨论】:
可能在 18.06.1 中修复,请参阅 github.com/moby/moby/issues/23043#issuecomment-417846760以上是关于安装后 Docker 无法启动,并显示“环回附加失败”的主要内容,如果未能解决你的问题,请参考以下文章