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 여부 확인
- Stackoverflow - How does one detect if one is running within a docker container within Python?
- Github - jaraco.docker
현재 실행중인 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 확인 방법
- Stackoverflow - how to get container name from inside? docker.io
- Stackoverflow - Get the container id where the gitlab job is executed
cgroup을 확인하거나 또는 HOSTNAME
환경변수를 사용하면 컨테이너 ID 를 획득할 수 있다. 두 방법 모두 확실한 방법은 아니다.
- ArchLinux에서는 cgroup ID 확인이 안되는걸 발견.
- GitLab CI에서
HOSTNAME
이 변경되는걸 확인.
GitLab CI 에서 컨테이너 확인하는 방법:
docker ps -q -f "label=com.gitlab.gitlab-runner.job.id=$CI_JOB_ID" -f "label=com.gitlab.gitlab-runner.type=build"