检测容器内的docker套接字是属于在其中运行的docker守护进程,还是从容器主机注入的



我正在寻找一种可靠的方法来检测容器中的docker套接字(如/var/run/docker.sock(是使用-v参数(docker run -v /var/run/docker.sock:/var/run/docker.sock image-name:image-tag(从docker主机注入容器中,还是由在docker容器中运行的docker守护进程创建(在docker容器的入口点运行dockerd --host=unix:///var/run/docker.sock --host=tcp://127.0.0.1:2375(。

我想强调的是,我想在容器内而不是在主机上检查这个。

我的首选解决方案是一个可以在容器内执行的shell脚本。输出可能是一个字符串,如"docker in docker"或"injected socket"(取决于检测到的模式(。

我发现了以下用于检查卷是否安装在容器内的解决方案:Docker-检查容器内的目录是否从主机安装

以下脚本适用于alpine和debian容器:

#!/bin/sh
v=$(mount | grep "/run/docker.sock")
if [ -n "$v" ]; then
echo "injected-socket"
elif [ -S /var/run/docker.sock ]; then
echo "local-socket"
else
echo "no-socket"
exit 1
fi

其他参考:

检查空命令输出https://stackoverflow.com/a/37618542/4202031

识别套接字文件的存在https://stackoverflow.com/a/12137503/4202031

最新更新