2017-01-12 9 views
1

私は、initようにsystemdを実行し、それからSYS_BOOT機能をドロップする必要があります。この特権付きドッカーコンテナは機能を削除できませんか?

docker run --rm --name mydocker --privileged \ 
    -v /sys:/sys:ro \ 
    -v /dev:/dev \ 
    --stop-signal=SIGRTMIN+3 \ 
    -p 8080:8080 \ 
    -p 5005:5005 \ 
    -p 8443:8443 \ 
    --net=host \ 
    --cap-drop=SYS_BOOT \ 
    /usr/sbin/init 

を実行していますよ。これは、コンテナのクリーンシャットダウンに必要です。上記のように実行すると、それはPID 1としてこのinit systemdに実行さんが、機能は削除されません。

CapInh: 0000003fffbfffff 
CapPrm: 0000003fffbfffff 
CapEff: 0000003fffbfffff 
CapBnd: 0000003fffbfffff 
CapAmb: 0000000000000000 

任意のアイデア理由:SYS_BOOT機能がドロップされたとき

[[email protected] /]# cat /proc/1/status | grep Cap 
CapInh: 0000003fffffffff 
CapPrm: 0000003fffffffff 
CapEff: 0000003fffffffff 
CapBnd: 0000003fffffffff 
CapAmb: 0000000000000000 

が、それは次のようになります。これは動作していないのですか?ドッカーバージョン:

クライアント:
バージョン:1.12.3
APIのバージョン:1.24
囲碁バージョン:go1.6.3
Gitはコミット:
OS /アーチ::内蔵34a2ead
のLinux/AMD64を

サーバー:
バージョン:1.12.3
APIのバージョン:1.24
囲碁バージョン:go1.6.3
Gitはコミット:34a2ead
内蔵:
OS /アーチ:のLinux/AMD64

答えて

2

--privilegedが指定されているときは、機能を削除することはできません。それは弱点のようです。ここに関連するコードは次のとおりです。Docker CE Linux OCI

if c.HostConfig.Privileged { 
    caplist = caps.GetAllCapabilities() 
} else { 
    caplist, err = caps.TweakCapabilities(s.Process.Capabilities.Effective, c.HostConfig.CapAdd, c.HostConfig.CapDrop) 
    if err != nil { 
     return err 
    } 
} 
+0

弱点のように見えます。ありがとうございました –

0

なぜあなたは、コンテナ内部のドッキングウィンドウ・デーモンを実行したいですか?他のサービスを制御するだけの場合は、docker-systemctl-replacement scriptがはるかに簡単なオプションになります。

関連する問題