如何检查bash脚本中是docker还是主机?

如何检查bash脚本中是docker还是主机?

我正在为 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

virt-what 检测到的平台

答案3

这不适用于 cgroup 2.0,并且不适用于 Mac 上的 Docker Desktop。

root@8a1d175a0b6c:/# cat /proc/self/cgroup

0::/

Linux 中根文件系统上的文件的存在/.dockerenv可能是了解您正在 Docker 容器内运行的更可靠方法,但这并不能提供您的容器 ID;它只是一个空文件。

需要有一种不那么脆弱的方式

  1. 检测您何时在容器中运行,并且
  2. 获取您自己的容器 ID。

Docker 团队在这方面确实失败了。至少,他们应该将容器 ID 放入其中/.dockerenv

相关内容