如何知道 docker 容器是否处于特权模式 运行
How to know if a docker container is running in privileged mode
想通过 bash 脚本了解当前 运行 容器是否从 内部 容器以 --privileged
模式启动(不是从主机)。
现在我坚持传递带有标志的环境变量,但这不是一个理想的解决方案。
来自 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
如果您的 docker run
命令具有 -v /var/run/docker.sock:/var/run/docker.sock
[,您的 docker 命令(docker ps
或 docker inspect
或任何命令)将在容器内部可用=14=]
想通过 bash 脚本了解当前 运行 容器是否从 内部 容器以 --privileged
模式启动(不是从主机)。
现在我坚持传递带有标志的环境变量,但这不是一个理想的解决方案。
来自 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
如果您的 docker run
命令具有 -v /var/run/docker.sock:/var/run/docker.sock
[,您的 docker 命令(docker ps
或 docker inspect
或任何命令)将在容器内部可用=14=]