【发布时间】:2014-11-17 18:07:53
【问题描述】:
如何从容器中获取 docker 的容器名称?
我不能使用“检查”,因为我必须使用容器内部的脚本从 JSON url 获取信息。
【问题讨论】:
标签: containers docker
如何从容器中获取 docker 的容器名称?
我不能使用“检查”,因为我必须使用容器内部的脚本从 JSON url 获取信息。
【问题讨论】:
标签: containers docker
如果您的意思是容器 ID,它可以在 env 中作为主机名变量使用。它应该与大多数操作的名称互换。
env
HOSTNAME=5252eb24b296
TERM=xterm
....
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5252eb24b296 ubuntu:14.04 "bash" 23 seconds ago Up 22 seconds test
【讨论】:
--hostname 标志明确指定主机名,其次 - 使用 --net=host 模式时。
--name 指定的,则不是。 (假设您想要的是友好名称,而不是自动分配的名称)。
你可以使用cut -c9- < /proc/1/cpuset
【讨论】:
如果您想要容器名称而不是容器 ID,您可以在容器的 eth0 上进行反向 DNS 查找。
dig -x `ifconfig eth0 | grep 'inet' | awk '{print $2}'` +short | cut -d'.' -f1
这会为您提供友好名称而不是 id。
更新:仅当您安装了 ifconfig 和 dig 以及其他工具时才有效。
【讨论】:
我认为,使用 --cidfile 和 -v 选项组合的最可靠方法。
docker run --cidfile=/tmp/container.id -v /tmp/container.id:/tmp/container.id ${IMAGE}
如果您要以这种方式启动容器,您可以从容器内部读取/tmp/container.id。
【讨论】:
如果容器内有 docker,
(需要绑定 -v /var/run/docker.sock:/var/run/docker.sock)
并且主机名没有被修改,您可以通过以下方式获取它:docker inspect -f '{{.Name}}' $HOSTNAME
但这种解决方案只能在极端情况下使用。
【讨论】:
在 docker-compose 的情况下,我们在主机名前有一个 /,因此使用 cut 我们将其删除。
docker inspect -f '{{ .Name }}' "$HOSTNAME" | cut -c 2-
【讨论】: