如何从容器内部获取Docker容器的镜像名称

16

我需要在容器内获取当前正在运行的Docker容器的名称。我用来运行容器的命令是:

docker exec -it 9d05bea23030 bash

我能够通过输入来检索容器的ID。

cat /etc/hostname

但是我不知道如何获取图像的名称。 我指的是在容器外输入docker ps时,在图像下方显示的名称。 我需要这个特定的名称,因为它包含关键信息。


try cat /etc/*elease* - francois P
1个回答

11

这种类型的信息/元数据默认情况下不会传递到容器中。有两个原因:

  1. 如果每个容器的元数据都被传递到容器中,当有人闯入容器时,这可能会潜在地构成安全风险。
  2. 容器无论如何也不需要这种类型的信息。

你之所以能够从容器内部访问容器ID是因为它默认情况下用作容器的主机名。如果在运行容器时指定主机名为container run --hostname ...,那么你将无法访问ID。

我不知道你为什么需要这个信息,但在容器内部获取它的唯一方法是首先通过某种方式将其传递到容器中,例如通过环境变量。

如果你不能从容器外部获得这个信息(如果你能使用docker exec似乎很奇怪),那么你将无法从正在运行的容器中获得该信息。


非常感谢您的答复。实际上,我可以访问这些信息,但其他用户不能。图像名称包含了我想提供给这些用户的信息。您能否详细说明如何通过环境变量将名称传递给容器,就像您建议的那样? - Donna Schweitzer
通过正在运行的容器?还是通过Dockerfile? - Matus Dubrava
最好是在一个正在运行的容器中完成,但如果只能通过Dockerfile完成,我也会尝试。 - Donna Schweitzer
1
我认为最好在Dockerfile中设置它,否则更改将不会持久化。例如,您可以登录到容器中,键入export IMAGE_NAME=nginx,然后通过echo $IMAGE_NAME检索此信息。这应该适用于大多数容器,但如果不行,您始终可以在其中创建一个文件并将信息存储在其中,然后让其他人访问该文件。 - Matus Dubrava
考虑将给定的信息作为标签传递。例如,Traefik使用标签读取有关容器的信息。 - Lubo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接