【问题标题】:How can I get the hostname of a container using docker-java?如何使用 docker-java 获取容器的主机名?
【发布时间】: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


【解决方案1】:
dockerClient.inspectContainerCmd(container.getId()).exec().getConfig().getHostName();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-15
    • 1970-01-01
    • 2014-05-21
    • 1970-01-01
    • 1970-01-01
    • 2013-06-14
    相关资源
    最近更新 更多