Tengo una aplicación node.js ejecutándose dentro de un contenedor acoplable con el nodo de imagen base: 16-alpine3.11. Quiero obtener el nombre del contenedor en el que se está ejecutando.
ex: docker ps: CONTAINER ID NAMES xyz node test.js: const c_name= //get container nameDesde fuera del contenedor
Puede usar la ventana acoplable cli para hacer esto. En el ejemplo, filtramos por ancestro bitnami/redis (en su caso, sería node:16-alpine3.11 )
$ docker container ls --filter "ancestor=bitnami/redis" --format "table {{.ID}}\t{{.Image}}\t{{.Names}}"Esto devuelve la identificación, el nombre y la imagen del contenedor como una tabla. Para recuperar los resultados como un objeto json, actualice el indicador de formato como se muestra a continuación:
docker container ls --filter "ancestor=bitnami/redis" --format 'json { "Id":"{{.ID}}", "Image": "{{.Image}}", "Names": "{{.Names}}" }'Consulte los prácticos documentos de referencia de cli proporcionados por docker.
Desde el interior del contenedor
Pase el socket de Unix al contenedor e invoque un script para obtener el nombre del contenedor:
$ docker run -it -v "/var/run/docker.sock:/var/run/docker.sock" origami-duckling:latestEl Dockerfile para `origami-duckling se ve así:
FROM node:16-alpine3.11 WORKDIR /usr/app RUN apk add curl jq ENV DOCKER_HOST="unix:///run/docker.sock" COPY get-container-name.sh /usr/app/get-container-name.sh CMD /usr/app/get-name.shProbablemente ejecutaría get-container-name antes de usar
cmdpara ejecutar la aplicación de nodo en su contenedor.
El get-container-name.sh se vería así:
#!/usr/bin/env sh export CONTAINER_NAME="$(curl -s --unix-socket /run/docker.sock http://docker/containers/$HOSTNAME/json | jq '.Name')" echo $CONTAINER_NAMEActualización: puede hacer esto desde su aplicación node.js si necesita:
Estoy usando got@11.8.3, got 12.x es ESM puro.
const got = require('got'); async function getHostName() { const metadata = await got(`http://unix:/var/run/docker.sock:/containers/${process.env.HOSTNAME}/json`).json(); console.log('Container name', metadata.Name); return metadata.Name }