web-dev-qa-db-ja.com

Dockerコンテナーが特権モードで実行されているかどうかを知る方法

現在実行中のコンテナーが--privilegedモードでinsideコンテナー(ホストコンピューターからではない)から開始された場合、bashスクリプトを介して知りたいです。

今のところ、フラグ付きのenv varを渡すことに悩まされていますが、理想的なソリューションではありません。

22
Leo Gallucci

Dockerホストから

docker inspect コマンドを使用します。

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フラグを必要とするコマンドです。

$ 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
45
Thomasleveil