插件窝 干货文章 如何查看当前虚拟机是否是Docker?

如何查看当前虚拟机是否是Docker?

容器 Docker 当前 echo 869    来源:    2025-04-28

如何判断当前环境是否为Docker容器

有几种方法可以检查当前运行的虚拟机或环境是否是Docker容器:

方法1:检查 /.dockerenv 文件

if [ -f /.dockerenv ]; then
    echo "当前运行在Docker容器中"
else
    echo "当前不在Docker容器中"
fi

方法2:检查 /proc/1/cgroup 文件内容

if grep -q docker /proc/1/cgroup; then
    echo "当前运行在Docker容器中"
else
    echo "当前不在Docker容器中"
fi

方法3:使用 hostname 检查

Docker容器通常有随机的长ID作为主机名:

if [[ $(hostname) =~ ^[0-9a-f]{12}$ ]]; then
    echo "可能是Docker容器"
else
    echo "可能不是Docker容器"
fi

方法4:检查容器化环境变量

if [ -n "$container" ] && [ "$container" = "docker" ]; then
    echo "当前运行在Docker容器中"
else
    echo "当前不在Docker容器中"
fi

方法5:使用 systemd-detect-virt 命令

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)是最可靠和常用的检测方式。