web-dev-qa-db-ja.com

DockerコンテナでOpenConnectVPNクライアントを呼び出すと、TUNSETIFFが失敗したことが示されます:操作は許可されていません

私はubuntuベースのDockerコンテナ内でopenconnectを呼び出しています。サーバーに正常に接続し、パスワードの入力を求めますが、その後

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

TUNSETIFF Wordを検索すると、すべての答えはSudoで実行されていないコマンドに関するものですが、私はすでにコンテナー内でrootになっています。他に何がうまくいかない可能性がありますか?

23
speedogoo

デフォルトでは、Dockerコンテナーは、Linux機能のセットを減らして起動されます(man capabilitiesを参照)。削減されたセットには、一部のネットワーク関連機能が含まれていません(おそらく、コンテナーがホストまたは他のコンテナーからのトラフィックをスニッフィングできないようにするため)。

完全なネットワーク機能を備えたコンテナを起動するには、SYS_NET_ADMIN引数を使用して--cap-add機能を明示的に追加します。例:

docker run -d --cap-add SYS_NET_ADMIN myimage

または、コンテナに--privilegedを使用して特権の完全なセットを付与します。例:

docker run -d --privileged myimage
29
Adrian Mouat

を介して特権コンテナを実行する

docker run -d --privileged myimage

エイドリアンが指摘したように、NET_ADMIN機能を追加して実行し、トンネルデバイスを渡します。例:

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

2
karlsebal

--privilegedでコンテナを開始します。 (答えてくれたエイドリアン・ムアットに感謝します)。

0
speedogoo