如何从运行在 Docker 容器内的程序中获取 Docker 名称

3

为了记录日志,我想知道我的程序在哪个Docker实例下运行的名称。

举个例子,如果我以以下方式启动它:

docker run -d --name my-docker-name some/image 

如何从运行在 Docker 容器中的程序中找到实际的 Docker 名称(例如,my-docker-name)?
2个回答

1
TL;DR: --hostname选项。

问题

容器的程序无法访问其容器的名称。

解决方案a) -不完美且不易实现-

https://dev59.com/c5Xfa4cB1Zd3GeqPbC14#36068029

解决方案 b)

添加选项 -h|--hostname="",与docker容器名称相匹配。然后只需要从程序中查询主机名,就完成了。

编辑

解决方案 c)

提供一个环境变量来命名,如你所建议的。整个命令看起来像这样:

$name="custom-uniq-name"
$docker run -h $name --name $name -e NAME=$name image-to-run

谢谢,Maël,这听起来很合理。虽然没有像 Docker 为其他值提供环境变量那样合理,但已经足够合理了。如果有其他解决方案提供的话,我会再等一段时间... - stratosgear
我认为(c)方案是最“漂亮”的,尽管我同意Docker应该像所有其他值一样自动传递此环境变量。 - stratosgear

0
如果您在 docker run 命令中添加以下内容:

-v /var/run/docker.sock:/var/run/docker.sock

则会将 Docker socket 暴露给容器,从而使您能够启动 Docker 命令,例如:

docker ps --filter

请注意,这可能存在潜在的危险,因为现在您的容器具有对主机的特权访问。

太“脏”了,抱歉... :( - stratosgear

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