Как узнать, работает ли контейнер докеров в привилегированном режиме

Хотелось бы узнать через скрипт bash, если текущий режим работы контейнера был запущен в режиме --privileged изнутри контейнера (а не из --privileged компьютера).

На данный момент я застрял в передаче env var с флагом, но не является идеальным решением.

Ответ 1

От принимающего докера

Используйте команду проверки докеров:

docker inspect --format='{{.HostConfig.Privileged}}' <container id>

И в сценарии bash вы можете пройти тест:

if [[ $(docker inspect --format='{{.HostConfig.Privileged}}' <container id>) == "false" ]]; then
    echo not privileged
else
    echo privileged
fi

Изнутри самого контейнера

Вы должны попытаться запустить команду, требующую флаг --privileged и посмотреть, не сработает ли она

Например, ip link add dummy0 type dummy - это команда, которая требует, --privileged флаг --privileged был успешным:

$ docker run --rm -it ubuntu ip link add dummy0 type dummy
RTNETLINK answers: Operation not permitted

в то время как

$ docker run --rm -it --privileged ubuntu ip link add dummy0 type dummy

работает нормально.

В сценарии bash вы можете сделать что-то похожее на это:

ip link add dummy0 type dummy >/dev/null
if [[ $? -eq 0 ]]; then
    PRIVILEGED=true
    # clean the dummy0 link
    ip link delete dummy0 >/dev/null
else
    PRIVILEGED=false
fi

Ответ 2

Изнутри контейнера ваши команды докеров (docker ps или docker inspect или любые) будут доступны, если ваша команда docker run имеет -v/var/run/docker.sock: /var/run/docker.sock