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

Akh*_*hil 7 shell bash docker

我正在为 docker 容器编写 shell 脚本。
我想在运行脚本之前检查它是 docker 容器还是主机。

像这样的东西:

if $MACHINE=docker; then
   echo proceed
elif $MACHINE=host; then
   echo 'it's not container'
   exit
fi
Run Code Online (Sandbox Code Playgroud)

lak*_*tak 6

您可以检查是否有任何控制组属于 docker:

if grep -q docker /proc/1/cgroup; then 
   echo inside docker 
else
   echo on host
   exit
fi
Run Code Online (Sandbox Code Playgroud)


Kra*_*out 5

你可以使用virt-what,它现在可以识别Docker了。您可以分别在 Debian 及其衍生产品或 Red Hat 及其衍生产品上使用apt install virt-what或安装它。yum install virt-what如果返回代码0,没有错误,则为物理机或未识别的虚拟机类型。码头工人归来docker

virt-what 检测到的平台

  • @AkhilJalagam 出于好奇,我查了一下:来自 virt-what 手册页:“virt-what 是一个 shell 脚本,可用于检测程序是否在虚拟机中运行”。您还可以在其主页 http://people.redhat.com/~rjones/virt-what 中查看源代码 tarball。我还检查了 Debian 上已安装的一个,可执行文件确实是一个 shell 脚本,但也有一个 elf 二进制帮助程序(至少在 debian 软件包中)。在您发送的链接中,virt-what.in 是可执行的 shell 脚本。但C中的助手也在那里。不能确定,我依靠手册页。 (2认同)