Docker 容器中的 systemd“无法设置安装命名空间”

Docker 容器中的 systemd“无法设置安装命名空间”

我最近更新了一个在内部使用 systemd 的 Docker,从 Debianstretch 到 Debianbuster。
从那时起它就不起作用了。

因此,根据systemctl status它无法设置名称空间:

Dec 10 14:22:11 f6f3e33e6bf2 systemd[1]: Starting OpenVPN tunnel for apu__ssl_vpn_config...
Dec 10 14:22:11 f6f3e33e6bf2 systemd[1736]: openvpn-client@apu__ssl_vpn_config.service: Failed to set up mount namespacing: Permission denied
Dec 10 14:22:11 f6f3e33e6bf2 systemd[1736]: openvpn-client@apu__ssl_vpn_config.service: Failed at step NAMESPACE spawning /usr/sbin/openvpn: Permission denied
Dec 10 14:22:11 f6f3e33e6bf2 systemd[1]: openvpn-client@apu__ssl_vpn_config.service: Main process exited, code=exited, status=226/NAMESPACE
Dec 10 14:22:11 f6f3e33e6bf2 systemd[1]: openvpn-client@apu__ssl_vpn_config.service: Failed with result 'exit-code'.
Dec 10 14:22:11 f6f3e33e6bf2 systemd[1]: Failed to start OpenVPN tunnel for apu__ssl_vpn_config.

现在我在 elasticsearch 上遇到了类似的问题,我通过在单元配置中添加一个包含以下内容的内容来修复该问题:

[Service]
PrivateTmp=false
NoNewPrivileges=yes

但遗憾的是,这一次并没有解决问题。

我还发现使用 LXC(或 LXD?)时会出现这个问题,尽管我不知道如何使用 docker 来解决这个问题。

另外,我像这样启动容器:

docker run -dt \
    --tmpfs /run --tmpfs /tmp \
    --volume /sys/fs/cgroup:/sys/fs/cgroup:ro \
    --device=/dev/net/tun \
    --cap-add SYS_ADMIN \
    --cap-add NET_ADMIN \
    <container>

非常感谢任何指点。

答案1

事实证明我必须像这样以特权模式运行容器:(
CAP_SYS_ADMIN没有必要)

docker run -dt \
    --tmpfs /run --tmpfs /tmp \
    --volume /sys/fs/cgroup:/sys/fs/cgroup:ro \
    --device=/dev/net/tun \
    --cap-add NET_ADMIN \
    --privileged \
    <container>

相关内容