【问题标题】:how to get container name from inside? docker.io如何从内部获取容器名称?码头工人.io
【发布时间】:2014-11-17 18:07:53
【问题描述】:

如何从容器中获取 docker 的容器名称?

我不能使用“检查”,因为我必须使用容器内部的脚本从 JSON url 获取信息。

【问题讨论】:

标签: containers docker


【解决方案1】:

如果您的意思是容器 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 指定的,则不是。 (假设您想要的是友好名称,而不是自动分配的名称)。
【解决方案2】:

你可以使用cut -c9- < /proc/1/cpuset

【讨论】:

  • 令人惊讶的是,这是大多数人可能需要的最简单的答案
【解决方案3】:

如果您想要容器名称而不是容器 ID,您可以在容器的 eth0 上进行反向 DNS 查找。

dig -x `ifconfig eth0 | grep 'inet' | awk '{print $2}'` +short | cut -d'.' -f1

这会为您提供友好名称而不是 id。

更新:仅当您安装了 ifconfigdig 以及其他工具时才有效。

【讨论】:

  • 有人可能想提到这一点(显然)只有在 ifconfig、dig 等实际安装在 docker 映像中时才有效。通常不是的情况,尤其是在基于 Alpine 或精简的图像中。
【解决方案4】:

我认为,使用 --cidfile-v 选项组合的最可靠方法。

docker run --cidfile=/tmp/container.id -v /tmp/container.id:/tmp/container.id ${IMAGE}

如果您要以这种方式启动容器,您可以从容器内部读取/tmp/container.id

【讨论】:

【解决方案5】:

如果容器内有 docker,
(需要绑定 -v /var/run/docker.sock:/var/run/docker.sock)
并且主机名没有被修改,您可以通过以下方式获取它:
docker inspect -f '{{.Name}}' $HOSTNAME

但这种解决方案只能在极端情况下使用。

【讨论】:

    【解决方案6】:

    在 docker-compose 的情况下,我们在主机名前有一个 /,因此使用 cut 我们将其删除。

    docker inspect -f '{{ .Name }}' "$HOSTNAME" | cut -c 2-
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-08
      • 1970-01-01
      • 2011-11-20
      • 2017-10-30
      • 1970-01-01
      • 2017-10-30
      • 2011-08-28
      相关资源
      最近更新 更多