Skip to content

Docker SDK for Python

A Python library for the Docker Engine API. It lets you do anything the docker command does, but from within Python apps – run containers, manage containers, manage Swarms, etc.

Runtime 의 Host 또는 Guest 여부 확인

현재 실행중인 Runtime 이 Docker Container 안에서 실행중인지? 아님 Host 머신에서 실행중인지 확인방법. 간단한 방법은 cgroup을 확인하면 된다.

# cat /proc/self/cgroup
14:name=systemd:/docker/56bc40d80c17e007026013d2afd48a6e0f80f9ddf93d21ce92a18fc50214090e
13:rdma:/
12:pids:/docker/56bc40d80c17e007026013d2afd48a6e0f80f9ddf93d21ce92a18fc50214090e
11:hugetlb:/docker/56bc40d80c17e007026013d2afd48a6e0f80f9ddf93d21ce92a18fc50214090e
10:net_prio:/docker/56bc40d80c17e007026013d2afd48a6e0f80f9ddf93d21ce92a18fc50214090e
9:perf_event:/docker/56bc40d80c17e007026013d2afd48a6e0f80f9ddf93d21ce92a18fc50214090e
8:net_cls:/docker/56bc40d80c17e007026013d2afd48a6e0f80f9ddf93d21ce92a18fc50214090e
7:freezer:/docker/56bc40d80c17e007026013d2afd48a6e0f80f9ddf93d21ce92a18fc50214090e
6:devices:/docker/56bc40d80c17e007026013d2afd48a6e0f80f9ddf93d21ce92a18fc50214090e
5:memory:/docker/56bc40d80c17e007026013d2afd48a6e0f80f9ddf93d21ce92a18fc50214090e
4:blkio:/docker/56bc40d80c17e007026013d2afd48a6e0f80f9ddf93d21ce92a18fc50214090e
3:cpuacct:/docker/56bc40d80c17e007026013d2afd48a6e0f80f9ddf93d21ce92a18fc50214090e
2:cpu:/docker/56bc40d80c17e007026013d2afd48a6e0f80f9ddf93d21ce92a18fc50214090e
1:cpuset:/docker/56bc40d80c17e007026013d2afd48a6e0f80f9ddf93d21ce92a18fc50214090e

Python 테스트 코드는 다음과 같다:

import os, re

path = "/proc/self/cgroup"

def is_docker():
  if not os.path.isfile(path): return False
  with open(path) as f:
    for line in f:
      if re.match("\d+:[\w=]+:/docker(-[ce]e)?/\w+", line):
        return True
    return False

print(is_docker())

참고로 일반적인 Host 머신 (Ubuntu 18.04 테스트)은 다음과 같다:

# cat /proc/self/cgroup
12:rdma:/
11:devices:/user.slice
10:memory:/user.slice
9:pids:/user.slice/user-1000.slice/session-2259.scope
8:perf_event:/
7:cpuset:/
6:net_cls,net_prio:/
5:freezer:/
4:hugetlb:/
3:blkio:/user.slice
2:cpu,cpuacct:/user.slice
1:name=systemd:/user.slice/user-1000.slice/session-2259.scope
0::/user.slice/user-1000.slice/session-2259.scope

컨테이너 안에서 컨테이너 ID 확인 방법

cgroup을 확인하거나 또는 HOSTNAME 환경변수를 사용하면 컨테이너 ID 를 획득할 수 있다. 두 방법 모두 확실한 방법은 아니다.

GitLab CI 에서 컨테이너 확인하는 방법:

docker ps -q -f "label=com.gitlab.gitlab-runner.job.id=$CI_JOB_ID" -f "label=com.gitlab.gitlab-runner.type=build"

See also

Favorite site