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의 루트 파일 시스템에 파일이 있으면 /.dockerenv
Docker 컨테이너 내에서 실행 중인지 알 수 있는 보다 안정적인 방법일 수 있지만 이는 컨테이너 ID를 제공하지 않으며 단지 빈 파일입니다.
덜 취약한 방법이 필요합니다
- 컨테이너에서 실행 중일 때를 감지하고
- 자신만의 컨테이너 ID를 받으세요.
Docker 팀은 여기서 정말 실패했습니다. 최소한 컨테이너 ID를 입력해야 합니다 /.dockerenv
.