2017-01-12 1 views
1

Je suis en cours d'exécution de cetteconteneur docker privilégié ne peut pas supprimer des fonctionnalités?

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 

qui courrais comme init et systemd drop capacité de SYS_BOOT de celui-ci. Ceci est nécessaire pour un arrêt propre du conteneur. Lorsqu'il est exécuté comme ci-dessus, il ne fonctionne systemd init à pid 1, mais la capacité n'est pas supprimée:

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

lorsque la capacité de SYS_BOOT est tombé, il devrait ressembler à ceci:

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

Toutes les idées pourquoi cela ne fonctionne pas? Version Docker:

Client:
Version: 1.12.3
API Version: 1.24
Version Go: go1.6.3
git commit: 34a2ead
Construit:
OS/Arch: linux/amd64

serveur:
Version: 1.12.3
version API: 1,24
Version Go: go1.6.3
git commit: 34a2ead
Construit:
OS/Arch: linux/amd64

Répondre

2

Vous ne pouvez pas supprimer les capacités lorsque --privileged est spécifié. Cela semble être une faiblesse. Voici le code correspondant: 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

cela semble être une faiblesse. Je vous remercie –

0

Pourquoi voulez-vous lancer un docker-démon à l'intérieur d'un conteneur? Si c'est juste pour contrôler d'autres services alors le docker-systemctl-replacement script serait une option beaucoup plus facile.