You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Shell脚本检测自身是否运行在Docker容器中?

如何编写Shell脚本检测是否运行在容器环境中

要判断Shell脚本是否运行在容器环境里,可通过容器特有的系统特征来实现,以下是几种可靠的判断逻辑及完整脚本:

常见判断依据

  • 检查是否存在Docker专属的.dockerenv文件(仅适用于Docker容器)
  • 查看/proc/1/cgroup文件内容,是否包含docker、containerd、kubelet等容器相关标识
  • 检查/proc/1/sched的第一行进程名,容器内PID为1的进程通常不是主机的init或systemd

综合判断的完整脚本

#!/bin/sh
# 综合多种方式判断是否在容器环境中
is_container() {
    # 检查Docker专属文件
    [ -f /.dockerenv ] && return 0
    # 检查cgroup内容
    grep -qE 'docker|containerd|kubelet' /proc/1/cgroup 2>/dev/null && return 0
    # 检查PID 1的进程名
    local pid1_name=$(head -n1 /proc/1/sched | awk '{print $1}')
    [ "$pid1_name" != "init" ] && [ "$pid1_name" != "systemd" ] && return 0
    return 1
}

if is_container; then
  echo 'running in container'
else
  echo 'running on host'
fi

说明

  • 单一判断方式可能存在误判(比如部分主机环境也会有类似cgroup内容),综合多种方式能提升检测准确性
  • 脚本兼容sh、bash等常见Shell环境,无需额外依赖

内容的提问来源于stack exchange,提问作者lonix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 06:25:00