如何设置modprobe覆盖allow_mounts_in_userns = 1?

问题描述

当尝试将Docker守护进程设置为在Debian上以非root用户身份(无根模式)运行时,遇到了以下问题。

the documentation所述,这些是Debian GNU / Linux遵循的步骤:

  • kernel.unprivileged_userns_clone=1添加/etc/sysctl.conf(或/etc/sysctl.d)并运行sudo sysctl --system
  • 要使用overlay2存储驱动程序(推荐),请运行sudo modprobe overlay permit_mounts_in_userns=1(Debian 10中引入的Debian特定内核补丁)。将配置添加/etc/modprobe.d以获得持久性。
  • 已知可在Debian 9和10上工作。仅Debian 10以来才支持overlay2,并且需要上述modprobe配置。

由此,我可以组成以下命令(以root用户身份)运行:

  1. 根据第一个要点配置sysctl的命令:
    echo "kernel.unprivileged_userns_clone=1" > /etc/sysctl.d/10-docker.conf \
    && sysctl --system
    
  2. 根据第一个要点来配置modprobe的命令:
    echo "overlay permit_mounts_in_userns=1" > /etc/modprobe.d/10-docker.conf \
    && modprobe overlay permit_mounts_in_userns=1
    

第一步似乎可以正常工作,但是从步骤2运行命令时,我遇到以下错误

libkmod: ERROR ../libkmod/libkmod-config.c:656 kmod_config_parse: /etc/modprobe.d/10-docker.conf line 1: ignoring bad line starting with 'overlay'

/etc/modprobe.d/10-docker.conf删除“ overlay”似乎都不能解决问题,这会导致以下错误

libkmod: ERROR ../libkmod/libkmod-config.c:656 kmod_config_parse: /etc/modprobe.d/10-docker.conf line 1: ignoring bad line starting with 'permit_mounts_in_userns=1'

我试图搜索有关如何设置此配置的一些说明。但是没有运气,有人知道吗?

解决方法

根据jelly频道的freenode IRC上的#debian,缺少options关键字,因此这应该是正确的命令:

echo "options overlay permit_mounts_in_userns=1" > /etc/modprobe.d/10-docker.conf