¿Cómo puedo obtener información del contenedor Docker Linux desde el propio contenedor?

Resuelto Alessandro asked hace 10 años • 16 respuestas

Me gustaría informarme docker containerssobre su configuración, de la misma manera que se puede obtener información sobre instancias EC2 a través de metadatos.

Puedo usar (siempre que dockeresté escuchando en el puerto 4243)

curl http://172.17.42.1:4243/containers/$HOSTNAME/json

para obtener algunos de sus datos, pero me gustaría saber si hay una mejor manera de obtener al menos el ID completo del contenedor, porque HOSTNAMEen realidad está reducido a 12 caracteres y la ventana acoplable parece realizar una "mejor coincidencia" en él.

Además, ¿cómo puedo obtener la IP externa del host de la ventana acoplable (aparte de acceder a los metadatos de EC2, que son específicos de AWS)?

Alessandro avatar Jan 08 '14 19:01 Alessandro
Aceptado

A menos que se anule, el nombre de host parece ser la identificación corta del contenedor en Docker 1.12.

root@d2258e6dec11:/project# cat /etc/hostname
d2258e6dec11

Externamente

$ 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
port5432 avatar Aug 16 '2016 20:08 port5432

Descubrí que la identificación del contenedor se puede encontrar en /proc/self/cgroup

Entonces puedes obtener la identificación con:

cat /proc/self/cgroup | grep -o  -e "docker-.*.scope" | head -n 1 | sed "s/docker-\(.*\).scope/\\1/"
Thomas A. avatar Sep 08 '2014 17:09 Thomas A.

Un comentario de madeddie me parece muy elegante:

CID=$(basename $(cat /proc/1/cpuset))
sirex avatar Oct 25 '2018 11:10 sirex

Puede comunicarse con Docker desde el interior de un contenedor utilizando un socket Unix a través de Docker Remote API:

https://docs.docker.com/engine/reference/api/docker_remote_api/

En un contenedor, puede encontrar una identificación de ventana acoplable acortada examinando $HOSTNAMEenv var. Según el documento, existe una pequeña posibilidad de colisión, creo que para una cantidad pequeña de contenedores, no tiene que preocuparse por eso. No sé cómo obtener la identificación completa directamente.

Puede inspeccionar el contenedor de manera similar a como se describe en la respuesta de banyan :

GET /containers/4abbef615af7/json HTTP/1.1

Respuesta:

HTTP/1.1 200 OK
Content-Type: application/json

{
         "Id": "4abbef615af7......  ",
         "Created": "2013.....",
         ...
}

Alternativamente, puede transferir la identificación de la ventana acoplable al contenedor en un archivo. El archivo está ubicado en el "volumen montado", por lo que se transfiere al contenedor:

docker run -t -i -cidfile /mydir/host1.txt -v /mydir:/mydir ubuntu /bin/bash

La identificación de la ventana acoplable (acortada) estará en el archivo /mydir/host1.txt en el contenedor.

Jiri avatar Jan 08 '2014 16:01 Jiri