【发布时间】:2015-11-15 15:35:40
【问题描述】:
想通过 bash 脚本了解当前运行的容器是否以--privileged 模式从容器内部(而不是主机)启动。
目前,我坚持传递带有标志的 env var,但这不是一个理想的解决方案。
【问题讨论】:
标签: bash shell docker containers dockerfile
想通过 bash 脚本了解当前运行的容器是否以--privileged 模式从容器内部(而不是主机)启动。
目前,我坚持传递带有标志的 env var,但这不是一个理想的解决方案。
【问题讨论】:
标签: bash shell docker containers dockerfile
使用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_container 添加大写字母,但没有成功,没有错误消息,但最后容器根本没有在特权模式下运行。有人对此有解决办法吗?
如果您的 docker run 命令具有 -v /var/run/docker.sock:/var/run/docker.sock,则从容器内部,您的 docker 命令(docker ps 或 docker inspect 或任何)将可用
【讨论】: