如何检测当前shell脚本是否运行在docker build构建过程中
检测逻辑实现方案
你可以通过匹配Docker构建环境专属的cgroup标识 + Docker环境默认文件做组合判断,该方案无需修改Dockerfile,兼容绝大多数Docker版本:
#! /bin/bash # myscript.sh if grep -q 'buildkit\|docker/build' /proc/1/cgroup 2>/dev/null && [ -f /.dockerenv ] then echo "I am in a docker build" else echo "I am not in a docker build" fi
方案说明
/.dockerenv是Docker环境的默认生成文件,只要运行在Docker容器内(不管是构建阶段还是运行阶段)都会存在,用于先判断当前是否在Docker环境内- Docker旧版Legacy构建引擎启动的RUN容器cgroup路径会包含
docker/build关键字,新版默认的BuildKit构建引擎启动的RUN容器cgroup路径会包含buildkit关键字,普通docker run启动的容器不会命中这两个关键字,因此可以精准区分构建阶段和其他运行场景 - 该逻辑无额外依赖,也不需要修改任何Dockerfile配置,外部调用脚本的用户无感知
内容的提问来源于stack exchange,提问作者Yang Bo
相关产品推荐
相关产品推荐

