在 docker 容器内的 node.js 应用程序 运行 中找到 docker 名称
find docker name in a node.js application running inside docker container
我有一个 node.js 应用程序 运行 在一个 docker 容器中,带有基本图像 node:16-alpine3.11。
我想获取 运行 所在容器的名称。
ex:
docker ps:
CONTAINER ID NAMES
xyz node
test.js:
const c_name= //get container name
从容器外
您可以使用 docker cli 来执行此操作。在示例中,我们过滤祖先 bitnami/redis
(在您的情况下,这将是 node:16-alpine3.11
)
$ docker container ls --filter "ancestor=bitnami/redis" --format "table {{.ID}}\t{{.Image}}\t{{.Names}}"
此 returns 容器的 ID、名称和图像作为 table。要将结果检索为 json 对象,请更新格式标志,如下所示:
docker container ls --filter "ancestor=bitnami/redis" --format 'json { "Id":"{{.ID}}", "Image": "{{.Image}}", "Names": "{{.Names}}" }'
查看 docker 提供的便利 cli reference docs。
来自容器内部
将 unix 套接字传递给容器并调用脚本获取容器名称:
$ docker run -it -v "/var/run/docker.sock:/var/run/docker.sock" origami-duckling:latest
`origami-duckling 的 Dockerfile 如下所示:
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.sh
You would probably run the get-container-name before you use cmd
to run the node app in your container.
get-container-name.sh
看起来像这样:
#!/usr/bin/env sh
export CONTAINER_NAME="$(curl -s --unix-socket /run/docker.sock http://docker/containers/$HOSTNAME/json | jq '.Name')"
echo $CONTAINER_NAME
更新:如果需要,您可以在 node.js 应用中执行此操作:
I'm using got@11.8.3, got 12.x is pure ESM.
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
}
我有一个 node.js 应用程序 运行 在一个 docker 容器中,带有基本图像 node:16-alpine3.11。 我想获取 运行 所在容器的名称。
ex:
docker ps:
CONTAINER ID NAMES
xyz node
test.js:
const c_name= //get container name
从容器外
您可以使用 docker cli 来执行此操作。在示例中,我们过滤祖先 bitnami/redis
(在您的情况下,这将是 node:16-alpine3.11
)
$ docker container ls --filter "ancestor=bitnami/redis" --format "table {{.ID}}\t{{.Image}}\t{{.Names}}"
此 returns 容器的 ID、名称和图像作为 table。要将结果检索为 json 对象,请更新格式标志,如下所示:
docker container ls --filter "ancestor=bitnami/redis" --format 'json { "Id":"{{.ID}}", "Image": "{{.Image}}", "Names": "{{.Names}}" }'
查看 docker 提供的便利 cli reference docs。
来自容器内部
将 unix 套接字传递给容器并调用脚本获取容器名称:
$ docker run -it -v "/var/run/docker.sock:/var/run/docker.sock" origami-duckling:latest
`origami-duckling 的 Dockerfile 如下所示:
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.sh
You would probably run the get-container-name before you use
cmd
to run the node app in your container.
get-container-name.sh
看起来像这样:
#!/usr/bin/env sh
export CONTAINER_NAME="$(curl -s --unix-socket /run/docker.sock http://docker/containers/$HOSTNAME/json | jq '.Name')"
echo $CONTAINER_NAME
更新:如果需要,您可以在 node.js 应用中执行此操作:
I'm using got@11.8.3, got 12.x is pure ESM.
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
}