2017-01-12 8 views
1

Я бег этогопривилегированный контейнер докеров не может отказаться от возможностей?

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 

, который должен запустить Systemd в качестве инициализации и падение потенциала SYS_BOOT от него. Это необходимо для чистого выключения контейнера. При запуске, как указано выше, это запустить Systemd инициализации, как PID 1, но эта возможность не отбрасывается:

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

при возможности SYS_BOOT отбрасывается, он должен выглядеть следующим образом:

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

Любые идеи, почему это не работает? Docker версия:

Клиент:
Версия: 1.12.3
API версии: 1,24
Go версия: go1.6.3
Git совершить: 34a2ead
постройки:
OS/Arch: Linux/amd64

Сервер:
версия: 1.12.3 версия
API: 1,24
Go версия: go1.6.3
Git совершить: 34a2ead
постройки:
OS/Arch: 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 будет намного проще.

 Смежные вопросы

  • Нет связанных вопросов^_^