¿Cómo puedo obtener información del contenedor Docker Linux desde el propio contenedor?
Me gustaría informarme docker containers
sobre 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 docker
esté 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 HOSTNAME
en 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)?
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
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/"
Un comentario de madeddie me parece muy elegante:
CID=$(basename $(cat /proc/1/cpuset))
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 $HOSTNAME
env 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.