【发布时间】:2020-10-23 13:13:53
【问题描述】:
我可以像这样创建、启动和检索 docker 容器的实例:
CreateContainerResponse response = dockerClient.createContainerCmd(imageId).exec();
String containerId = response.getId();
dockerClient.startContainerCmd(containerId).exec()
Container container = dockerClient.listContainersCmd()
.withIdFilter(Collections.singletonList(containerId))
.exec()
.get(0);
但是,Container 对象似乎并未公开主机名。
我还可以像这样检查正在运行的容器:
InspectContainerResponse response = dockerClient.inspectContainerCmd(container.getId()).exec()
同样,响应不包含主机名。它确实包含一个 hostnamePath,它引用了一个存储主机名的文件,但这需要 root 权限才能读取我的应用程序没有的权限。
我可以对容器 ID 进行子串化,但这似乎很脆弱。如果不需要,我还想避免使用外部 docker 进程。
有什么方法可以直接从 docker-java 检索主机名?
【问题讨论】:
-
您在寻找什么主机名?容器内的值
hostname将返回,它可以从同一Docker 网络上的其他容器访问的主机名,一种从外部访问容器的方法? (一旦有了这个值,你会怎么做?) -
@DavidMaze 我正在寻找容器内的值
hostname将返回,以及可以从同一 Docker 网络上的其他容器中使用的主机名。这些似乎是同一件事(至少对于我使用的网络配置),因为如果我 ssh 进入容器 a 并运行主机名 -s,然后 ssh 进入容器 b 并 ping 检索到的主机名,我会收到返回的数据包。我需要将此值设置为必须在两个容器之间共享的配置文件,并且两个容器之间的配置文件必须相同(我正在使用的第 3 方工具的约束)。
标签: java docker docker-java