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

在docker容器中调用OpenConnect VPN客户端显示TUNSETIFF失败:不允许操作,docker,vpn,Docker,Vpn,我在一个基于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启

我在一个基于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功能
)。缩减集不包括一些与网络相关的功能(可能是为了使容器无法嗅探来自主机或其他容器的流量)

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

docker run -d --cap-add SYS_NET_ADMIN myimage
或者使用
--privileged
为容器提供全套权限,例如:

docker run -d --privileged myimage

或者通过以下方式运行容器:

docker run-d——特权myimage

正如Adrian所指出的,或者使用添加的
NET\u ADMIN
功能运行它,并通过隧道设备,例如:


docker run-d--cap add NET\u ADMIN--device/dev/NET/tun myimage

尝试使用
--privileged
启动容器。是的,它可以工作。谢谢。很高兴它对你有用。我在下面补充了完整的答案。我猜--cap add SYS_NET_ADMIN也会起作用。不幸的是,
SYS_NET_ADMIN
在docker 17.xx中不可用,您可以使用
SYS_ADMIN
执行一系列系统管理操作或
NET_ADMIN
执行各种网络相关操作。无论如何——cap add NET_ADMIN将处理openconnect。如果您不运行容器特权,但仅使用添加的
NET_ADMIN
功能,则需要通过以下方式传递隧道设备:例如:
docker run-d——cap add NET_ADMIN——设备/dev/NET/tun myimage