如何检测当前脚本是否在 docker 构建中运行?

Yan*_* Bo 5 linux bash shell docker dockerfile

假设我有一个Dockerfile运行脚本的程序,

RUN ./myscript.sh
Run Code Online (Sandbox Code Playgroud)

我怎样才能编写以便它可以检测自身是否在 a 期间myscript.sh由命令启动?RUNdocker build

RUN ./myscript.sh
Run Code Online (Sandbox Code Playgroud)

理想情况下,它不需要对 进行任何更改Dockerfile,以便 的调用者myscript.sh不需要有关 的专业知识myscript.sh

Phi*_*ppe 3

尝试这个 :

#!/bin/bash

# myscript.sh

isDocker(){
    local cgroup=/proc/1/cgroup
    test -f $cgroup && [[ "$(<$cgroup)" = *:cpuset:/docker/* ]]
}

isDockerBuildkit(){
    local cgroup=/proc/1/cgroup
    test -f $cgroup && [[ "$(<$cgroup)" = *:cpuset:/docker/buildkit/* ]]
}

isDockerContainer(){
    [ -e /.dockerenv ]
}

if isDockerBuildkit || (isDocker && ! isDockerContainer)
then
  echo "I am in a docker build"
else
  echo "I am not in a docker build"
fi
Run Code Online (Sandbox Code Playgroud)