有几种方法可以检查当前运行的虚拟机或环境是否是Docker容器:
if [ -f /.dockerenv ]; then
echo "当前运行在Docker容器中"
else
echo "当前不在Docker容器中"
fi
if grep -q docker /proc/1/cgroup; then
echo "当前运行在Docker容器中"
else
echo "当前不在Docker容器中"
fi
Docker容器通常有随机的长ID作为主机名:
if [[ $(hostname) =~ ^[0-9a-f]{12}$ ]]; then
echo "可能是Docker容器"
else
echo "可能不是Docker容器"
fi
if [ -n "$container" ] && [ "$container" = "docker" ]; then
echo "当前运行在Docker容器中"
else
echo "当前不在Docker容器中"
fi
if systemd-detect-virt -c; then
echo "当前运行在容器中"
if [ "$(systemd-detect-virt)" = "docker" ]; then
echo "具体是Docker容器"
fi
else
echo "当前不在容器中"
fi
#!/bin/bash
is_docker() {
# 检查/.dockerenv文件
if [ -f /.dockerenv ]; then
return 0
fi
# 检查cgroup
if grep -q docker /proc/1/cgroup; then
return 0
fi
# 检查环境变量
if [ -n "$container" ] && [ "$container" = "docker" ]; then
return 0
fi
# 其他检查...
return 1
}
if is_docker; then
echo "当前运行在Docker容器中"
else
echo "当前不在Docker容器中"
fi
这些方法中,前两种(/.dockerenv文件和/proc/1/cgroup)是最可靠和常用的检测方式。