bash 스크립트에서 docker인지 호스트인지 확인하는 방법은 무엇입니까?

bash 스크립트에서 docker인지 호스트인지 확인하는 방법은 무엇입니까?

Docker 컨테이너용 쉘 스크립트를 작성 중입니다.
스크립트를 실행하기 전에 도커 컨테이너인지 호스트인지 확인하고 싶습니다.

이 같은:

if $MACHINE=docker; then
   echo proceed
elif $MACHINE=host; then
   echo 'it's not container'
   exit
fi

답변1

docker에 속한 제어 그룹이 있는지 확인할 수 있습니다.

if grep -q docker /proc/1/cgroup; then 
   echo inside docker 
else
   echo on host
   exit
fi

답변2

를 사용할 수 있으며 virt-what이제 Docker를 인식합니다. Debian 및 그 파생물 또는 Red Hat 및 그 파생물에서 각각 사용하거나 apt install virt-what설치할 수 있습니다. yum install virt-what반환 코드가 0이고 오류가 없으면 머신은 물리적 머신이거나 인식할 수 없는 가상 머신 유형입니다. 항만 노동자들이 돌아옵니다 docker.

가상으로 감지된 플랫폼

답변3

이는 cgroup 2.0에서는 작동하지 않으며 Mac의 Docker Desktop에서도 작동하지 않습니다.

root@8a1d175a0b6c:/# cat /proc/self/cgroup

0::/

Linux의 루트 파일 시스템에 파일이 있으면 /.dockerenvDocker 컨테이너 내에서 실행 중인지 알 수 있는 보다 안정적인 방법일 수 있지만 이는 컨테이너 ID를 제공하지 않으며 단지 빈 파일입니다.

덜 취약한 방법이 필요합니다

  1. 컨테이너에서 실행 중일 때를 감지하고
  2. 자신만의 컨테이너 ID를 받으세요.

Docker 팀은 여기서 정말 실패했습니다. 최소한 컨테이너 ID를 입력해야 합니다 /.dockerenv.

관련 정보