我最近更新了一个在内部使用 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>