我正在为 docker 容器编写 shell 脚本。
我想在运行脚本之前检查它是 docker 容器还是主机。
像这样的东西:
if $MACHINE=docker; then
echo proceed
elif $MACHINE=host; then
echo 'it's not container'
exit
fi
答案1
您可以检查是否有任何控制组属于 docker:
if grep -q docker /proc/1/cgroup; then
echo inside docker
else
echo on host
exit
fi
答案2
你可以使用virt-what
,它现在可以识别Docker了。您可以分别在 Debian 及其衍生产品或 Red Hat 及其衍生产品上使用apt install virt-what
或安装它。yum install virt-what
如果返回代码0,没有错误,则为物理机或未识别的虚拟机类型。码头工人归来docker
。
答案3
这不适用于 cgroup 2.0,并且不适用于 Mac 上的 Docker Desktop。
root@8a1d175a0b6c:/# cat /proc/self/cgroup
0::/
Linux 中根文件系统上的文件的存在/.dockerenv
可能是了解您正在 Docker 容器内运行的更可靠方法,但这并不能提供您的容器 ID;它只是一个空文件。
需要有一种不那么脆弱的方式
- 检测您何时在容器中运行,并且
- 获取您自己的容器 ID。
Docker 团队在这方面确实失败了。至少,他们应该将容器 ID 放入其中/.dockerenv
。