web-dev-qa-db-ja.com

Docker Swarmモードのサービス呼び出しでLinux機能を設定する方法

スウォーム(1.12.x)の下で実行されるボールトの概念を調べています。

単一のコンテナはdocker run -d --cap-add IPC_LOCK -p 8200:8200 -p 8215:8125 --name vault --volume /vagrant/vault:/vagrant/vault vault server -config=/path/to/vault.hclで始まります

しかし、これをサービスとしてswarmで実行したい場合、IPC_LOCK機能を指定して、この場合にボールトサービスの暗号化されたスワッピングをロックする方法がないようです。

docker service createコマンドでスウォームモードサービスを開始するときに--cap-addフラグを設定するにはどうすればよいですか?

4
volvox

それは現在サポートされていませんが、Dockerはソリューションに取り組んでいます。 --cap-addオプションを盲目的に含めないことの背後にあるロジックは、大規模なクラスターにあり、マネージャーが追加の権限を持つコンテナーをワーカーに送信するというセキュリティ上の懸念がある可能性があります。ワーカーは、ホストにアクセスできない安全なコンテナーの実行を信頼するかもしれませんが、特権コンテナーを介したホストへのリモートルートアクセスを許可したくない場合があります。

これに関する議論はgithubで終わりました:

https://github.com/docker/docker/pull/26849#issuecomment-252704844

https://github.com/docker/swarmkit/issues/10

https://github.com/docker/swarmkit/pull/1722

https://github.com/moby/moby/issues/25885#issuecomment-557790402 および https://github.com/docker/cli/pull/2199

7
BMitch

https://hub.docker.com/r/ixdotai/swarm-launcher を参照してください

そのリポジトリはこのコメント/アイデアに基づいています: https://github.com/moby/moby/issues/25885#issuecomment-5733555

使用例に応じて、回避策は、swarm Host(s)からサービスに/var/run/docker.sockをバインドマウントし、サービスからdocker run --privileged ...またはdocker run --cap-add ...を実行して、実際の特権を実行することですコマンド。 (サービスのイメージにdocker cliをインストールする必要があります。)この方法でdockerを実行する最も内側のコンテナーには、サービスではなくスウォームホストの特権/機能があり、サービスは単に薄くなります。コンテナ層。

0
Mark Rajcok

問題を解決する解決策を見つけました。cap_net_adminをスウォームモードで使用できます。

ランタイムソースコードを変更して、必要な機能を追加できます(ローカルのデフォルト設定になります)。

たとえば、ランタイムにCAP_NET_ADMINを追加しました(nvidia-container-runtimeを使用) wanyvic/nvidia-container-runtime

その後、私はそれを再構築し、コンテナーを開始し(スウォームモードを使用)、入力:capsh --printおよびCAP_NET_ADMINが見つかります:

root@25303a54ebb3:/# capsh --print
Current:=cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_net_bind_service,cap_net_admin,cap_net_raw,cap_sys_chroot,cap_mknod,cap_audit_write,cap_setfcap+eip
Bounding set =cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_net_bind_service,cap_net_admin,cap_net_raw,cap_sys_chroot,cap_mknod,cap_audit_write,cap_setfcap
Securebits: 00/0x0/1'b0
 secure-noroot: no (unlocked)
 secure-no-suid-fixup: no (unlocked)
 secure-keep-caps: no (unlocked)
uid=0(root)
gid=0(root)
groups=

しかし、この方法は良くありません。

cap_addcap_dropまたはdocker-compose.ymlを設定することもできませんが、解決する方法が見つかりません。

0
wany