在Ubuntu 14.04上启动Docker守护进程出错(Devices cgroup没有挂载)

37

我按照docker官方教程安装并验证了docker安装(来源于http://docs.docker.com/linux/step_one/)。

我在两台Ubuntu 14.04机器上尝试,但都在启动docker守护进程时遇到以下错误:

$ sudo docker daemon
INFO[0000] Listening for HTTP on unix (/var/run/docker.sock) 
INFO[0000] [graphdriver] using prior storage driver "aufs" 
INFO[0000] Option DefaultDriver: bridge                 
INFO[0000] Option DefaultNetwork: bridge                
WARN[0000] Running modprobe bridge nf_nat br_netfilter failed with    message: modprobe: WARNING: Module br_netfilter not found. , error: exit status 1 
INFO[0000] Firewalld running: false                     
WARN[0000] Your kernel does not support cgroup memory limit: mountpoint for memory not found 
WARN[0000] mountpoint for cpu not found                 
FATA[0000] Error starting daemon: Devices cgroup isn't mounted 

我很感激任何帮助解决这个问题的支持。
8个回答

40
我通过手动启动Docker守护程序来解决了这个问题: < p >< code > sudo service docker start


11
这适用于亚马逊机器镜像(AMI)的实例。 - Camilo Silva
适用于亚马逊 Linux。在运行 Docker 命令前记得使用 sudo - Defozo
也适用于Kali Linux,谢谢! - kalou.net

31

注意:看起来这个问题只存在于 Ubuntu 14.04 及更早版本中。更新的 Ubuntu 版本不需要这样做。

尝试以下步骤:

  • 使用具有 sudo 权限的用户登录 Ubuntu。

  • 编辑 /etc/default/grub 文件。

  • 将 GRUB_CMDLINE_LINUX 的值设置如下:

    GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"

  • 保存并关闭文件。

  • 更新 GRUB。

    $ sudo update-grub

  • 重新启动您的系统。

一些人报告重启 docker 守护程序可以解决问题:

sudo systemctl restart docker

如上所述,较新版本的Docker文档并未提到这一点

更新

对于某些运行Ubuntu 14.04或更早版本的用户,此方法可行:

sudo apt-get install cgroup-lite

10
这也解决了我的问题,但我想知道这个cgroup东西到底是做什么的。 - KillerSnail
很遗憾,这并没有解决br_netfilter问题。 - Veda
我通过安装3.19.0-33-generic Linux镜像解决了br_netfilter问题。 - Mitar
然后还要安装linux-image-extra-3.19.0-33-generic以恢复aufs。 - Mitar
@Rico,我知道现在已经晚了5年,但是我正在使用Ubuntu 18.04并遇到了这个错误。最近我从一个虚拟服务器切换到另一个虚拟服务器。我对这个错误非常绝望,也许你可以看一下我的Docker论坛帖子:https://forums.docker.com/t/docker-wont-start-because-of-a-daemon/99942 - y.y
所有这些更改都是不必要的。在Ubuntu 14.04上,只需运行sudo apt-get install cgroup-lite即可,无需重新启动等操作。 - pts

4

可能需要的软件包:

apt-get install aufs-tools
apt-get install cgroup-lite

1
在Ubuntu 14上为我解决了这个问题。 - Sasha Pachev

4

我曾遇到过Debian的这个问题。

cgroupfs-mount软件包解决了这个问题。

sudo aptitude install cgroupfs-mount

1
这在Ubuntu 14.04上不起作用(正如OP所要求的那样),该软件包cgroupfs-mount不存在。 - pts
这个简单的命令让我在一个带有4.19内核的旧MX Linux上成功运行。非常感谢! - Zwyx

4

通过运行以下命令检查cgroups是否已经挂载:

$ cat /proc/self/cgroup | grep devices

如果您看到类似于以下内容的输出:
1:name=systemd:/user/docker/12345.devices

如果cgroups已经挂载,那么可能是其他问题导致了错误。

如果在运行上述命令时没有看到任何输出,则需要手动挂载cgroups。要执行此操作,请运行以下命令:

$ sudo mkdir /sys/fs/cgroup/devices
$ sudo mount -t cgroup -o devices devices /sys/fs/cgroup/devices

在挂载cgroups之后,使用以下命令重新启动Docker服务:

$ sudo systemctl restart docker

3
我在 Fedora 31 上遇到了这个问题。按照这里的描述解决方案是在/etc/sysconfig/grub中的GRUB_CMDLINE_LINUX变量后面添加systemd.unified_cgroup_hierarchy=0
(在我的情况下, GRUB_CMDLINE_LINUX="resume=/dev/mapper/fedora-swap rd.lvm.lv=fedora/root rd.lvm.lv=fedora/swap rhgb quiet systemd.unified_cgroup_hierarchy=0"
然后运行grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg并重新启动。

3

我只需从/etc/fstab中删除任何挂载,并解决了Devices cgroup isn't mounted的问题。我认为Module br_netfilter not found只是一个警告,不会阻止Docker启动。但你可以通过安装以下软件来解决它:

apt-get install linux-image-3.19.0-33-generic linux-image-extra-3.19.0-33-generic

之后你需要重新启动。

"extra"是必需的,因为在Ubuntu基本镜像中不再包含aufs。


0
在我的情况下,我不需要安装或配置任何新的东西。Docker 在这次故障之前一直运行良好。 尝试重新启动 Docker(例如 systemctl restart docker)。 如果失败,请关闭并冷启动计算机。确保 Docker 在运行。 在 129 天的正常运行后,我的 Docker 突然进入了一种奇怪而糟糕的状态。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接