[linux] 컨테이너 자체에서 Docker Linux 컨테이너 정보를 어떻게 얻을 수 있습니까?
docker containers
메타 데이터를 통해 EC2 인스턴스에 대한 정보를 얻을 수있는 것과 같은 방식으로 구성을 알고 싶습니다 .
사용할 수 있습니다 (제공되는 docker
포트에서 제공 4243
)
curl http://172.17.42.1:4243/containers/$HOSTNAME/json
데이터의 일부를 얻으려면 HOSTNAME
실제로 컨테이너의 전체 ID를 얻는 더 좋은 방법이 있는지 알고 싶습니다. 실제로 12 자로 단축되고 도커는 “최적의 일치”를 수행하는 것처럼 보입니다.
또한 도커 호스트의 외부 IP를 얻는 방법 (AWS 전용 EC2 메타 데이터에 액세스하는 것 제외)
답변
컨테이너 ID는 / proc / self / cgroup에서 찾을 수 있습니다.
그래서 당신은 ID를 얻을 수 있습니다 :
cat /proc/self/cgroup | grep -o -e "docker-.*.scope" | head -n 1 | sed "s/docker-\(.*\).scope/\\1/"
답변
재정의되지 않는 한 호스트 이름은 Docker 1.12의 짧은 컨테이너 ID 인 것으로 보입니다.
root@d2258e6dec11:/project# cat /etc/hostname
d2258e6dec11
외부 적으로
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d2258e6dec11 300518d26271 "bash" 5 minutes ago
$ docker -v
Docker version 1.12.0, build 8eab29e, experimental
답변
Docker Remote API를 통해 유닉스 소켓을 사용하여 컨테이너 내부에서 도커와 통신 할 수 있습니다.
https://docs.docker.com/engine/reference/api/docker_remote_api/
컨테이너에서 $HOSTNAME
env var 를 검사하여 단축 도커 ID를 찾을 수 있습니다 . 의사에 따르면, 충돌 가능성이 적습니다. 적은 수의 컨테이너에 대해서는 걱정할 필요가 없다고 생각합니다. 직접 신분을 얻는 방법을 모르겠습니다.
반얀 답변에 설명 된 것과 유사한 방식으로 컨테이너를 검사 할 수 있습니다 .
GET /containers/4abbef615af7/json HTTP/1.1
응답:
HTTP/1.1 200 OK
Content-Type: application/json
{
"Id": "4abbef615af7...... ",
"Created": "2013.....",
...
}
또는 도커 ID를 파일의 컨테이너로 전송할 수 있습니다. 파일이 “마운트 된 볼륨”에 있으므로 컨테이너로 전송됩니다.
docker run -t -i -cidfile /mydir/host1.txt -v /mydir:/mydir ubuntu /bin/bash
도커 ID (단축 됨)는 컨테이너의 /mydir/host1.txt 파일에 있습니다.
답변
컨테이너 내에서 전체 컨테이너 ID를 가져옵니다.
cat /proc/self/cgroup | grep "cpu:/" | sed 's/\([0-9]\):cpu:\/docker\///g'
답변
madeddie 의 의견은 나에게 가장 우아하게 보입니다.
CID=$(basename $(cat /proc/1/cpuset))
답변
경고 : 고려하기 전에이 방법의 보안 위험을 이해해야 합니다. 위험에 대한 John 의 요약 :
컨테이너에 대한 액세스 권한을 부여하면도
/var/run/docker.sock
커가 제공 한 격리를 벗어나 호스트 시스템에 액세스하는 것이 [사실] 쉽습니다. 분명히 이것은 잠재적으로 위험합니다.
컨테이너 내에서 dockerId는 호스트 이름입니다. 그래서 당신은 할 수 있습니다 :
- 호스트와 동일한 버전으로 컨테이너에 docker-io 패키지 를 설치하십시오.
- 로 시작
--volume
/var/run/docker.sock:/var/run/docker.sock --privileged - 마지막으로
docker inspect $(hostname)
컨테이너 내부에서 실행하십시오.
이것을 피하십시오. 위험을 이해하고 위험을 명확하게 완화 한 경우에만 수행하십시오.
답변
간단하게하기 위해
- 컨테이너 ID는 docker 내의 호스트 이름입니다.
- 컨테이너 정보는 / proc / self / cgroup에서 사용할 수 있습니다
호스트 이름을 얻으려면
hostname
또는
uname -n
또는
cat /etc/host
출력은 모든 파일로 경로 재 지정 될 수 있으며 응용 프로그램에서 다시 읽을 수 있습니다. 예 : # hostname > /usr/src//hostname.txt