【问题标题】:Docker container /etc/hosts resolve IDDocker 容器 /etc/hosts 解析 ID
【发布时间】:2017-09-26 16:47:33
【问题描述】:

我的例子:我有 100 个容器正在运行。有一次,其中有 50 个呼叫“http://partner/greet”(无法更改)。 我希望这 50 个容器知道他们每个人都可以在“哪里”找到对应的伙伴容器(另外 50 个)。这是一对一的关系。

当使用docker run 运行容器时,我知道可以使用--add-host 选项将IP 地址添加到主机名。所以对于 50 个容器,我将对应的伙伴容器 IPv4 映射到“伙伴”。

但我的问题是:容器 IP 不是静态的。当容器重新启动时,它的 IP 地址可以更改。这是个大问题。

我的容器可以通过ping <id>ping <name> 相互访问。 但是当我尝试将 ID 而不是 IP 地址添加到主机文件时,出现错误:ID 不是有效的 IP 地址(当然不是)。

我需要一些能让我将容器的 ID 或名称映射到“合作伙伴”的东西,这样这些 URL 调用才能工作。我该怎么做?这可能吗?

【问题讨论】:

  • 为什么不创建一个共享网络,给每个容器起一个名字,然后就可以用容器名作为DNS名来映射容器呢?
  • @yamenk 我实际上已经将它们放在共享网络中,但是如何将容器名称映射到“合作伙伴”?

标签: docker


【解决方案1】:

我认为您正在搜索的是启动容器时的--link 选项:

--link=CONTAINER_NAME 或 ID:ALIAS

在运行容器时使用此选项会为新容器提供 /etc/hosts 一个名为 ALIAS 的额外条目,它指向的 IP 地址 由 CONTAINER_NAME_or_ID 标识的容器。这让进程 在新容器内连接到主机名 ALIAS 而无需 知道它的IP。 --link= 选项将在下面更详细地讨论。 因为 Docker 可能会为链接的 IP 地址分配不同的 IP 地址 重新启动容器时,Docker 会更新 ALIAS 条目 接收容器的 /etc/hosts 文件。

你基本上可以在启动容器时使用命令将容器链接到它的伙伴:

docker run <partner-container-name>:partner ...

因此在容器中,partner 将解析为合作伙伴容器 IP,您不必对 IP 地址进行硬编码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-13
    • 1970-01-01
    • 2019-03-26
    • 2017-09-14
    • 1970-01-01
    • 2018-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多