在 docker 容器中调用 OpenConnect VPN 客户端显示 TUNSETIFF 失败:不允许操作

Calling OpenConnect VPN client in docker container shows TUNSETIFF failed: Operation not permitted

我在基于 ubuntu 的 docker 容器中调用 openconnect。它成功连接到服务器并提示我输入密码,但是

Got CONNECT response: HTTP/1.1 200 OK
CSTP connected. DPD 30, Keepalive 20
TUNSETIFF failed: Operation not permitted

我搜索了 TUNSETIFF 词,每个答案都是关于 sudo 中的命令而不是 运行,但我已经是容器中的 root 用户了。还有什么可能出错?

使用 --privileged 启动容器。 (感谢 Adrian Mouat 的回答)。

默认情况下,Docker 容器以一组精简的 linux 功能启动(参见 man capabilities)。减少的集合不包括一些与网络相关的功能(大概是为了让容器无法嗅探来自主机或其他容器的流量)。

要启动具有完整网络功能的容器,请使用 --cap-add 参数显式添加 SYS_NET_ADMIN 功能,例如:

docker run -d --cap-add SYS_NET_ADMIN myimage

或者使用 --privileged 为容器提供全套权限,例如:

docker run -d --privileged myimage

或者 运行 容器通过

获得特权

docker run -d --privileged myimage

正如 Adrian 指出的那样,或者 运行 添加了 NET_ADMIN 功能并通过隧道设备,例如:

docker run -d --cap-add NET_ADMIN --device /dev/net/tun myimage