如何知道docker容器是否以特权模式运行

Leo*_*cci 18 bash shell containers docker dockerfile

想知道通过bash脚本,如果当前正在运行的容器是--privileged从容器内部(而不是从主机)启动的.

现在,我仍然坚持使用带有标志的env var,但这不是一个理想的解决方案.

Tho*_*eil 39

来自docker主机

使用docker inspect命令:

docker inspect --format='{{.HostConfig.Privileged}}' <container id>
Run Code Online (Sandbox Code Playgroud)

在bash脚本中你可以进行测试:

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

从容器内部

您必须尝试运行需要该--privileged标志的命令并查看它是否失败

例如,ip link add dummy0 type dummy是一个要求--privileged标志成功的命令:

$ docker run --rm -it ubuntu ip link add dummy0 type dummy
RTNETLINK answers: Operation not permitted
Run Code Online (Sandbox Code Playgroud)

$ docker run --rm -it --privileged ubuntu ip link add dummy0 type dummy
Run Code Online (Sandbox Code Playgroud)

运行正常.

在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
Run Code Online (Sandbox Code Playgroud)