【问题标题】:Figure out IP address within docker container找出 docker 容器中的 IP 地址
【发布时间】:2017-03-20 20:22:24
【问题描述】:

我有一个docker-compose 文件,其中包含多个服务容器定义。其中一项服务在同一个 docker-compose 运行中与 Apache Kafka 通信。

所以我有这样的 kafka docker 定义:

  kafka:
    image: spotify/kafka
    ports:
      - "2181:2181"
      - "9092:9092"
    environment:
      ADVERTISED_HOST: 127.0.0.1
      ADVERTISED_PORT: 9092

我的服务定义在同一个 docker-compose 文件中。在服务的启动脚本中,我必须以某种方式找出 Kafka 实例的 IP 地址。

我知道,我可以使用 docker inspect 之类的东西来找出容器使用的 IP 地址。

但是如何在 docker-compose 环境中动态执行呢?

编辑

所以,正确的配置应该是(谢谢@nwinkler):

kafka:
image: spotify/kafka
ports:
  - "2181:2181"
  - "9092:9092"
environment:
  ADVERTISED_HOST: kafka
  ADVERTISED_PORT: 9092

myservice:
image: foo
links:
  - kafka:kafka

不要忘记将ADVERTISED_HOST 设置为kafka(或者你如何在docker-compose 中命名你的kafka 容器)。

【问题讨论】:

  • 您应该能够使用kafka 作为主机名来连接到kafka 容器。

标签: docker apache-kafka docker-compose


【解决方案1】:

您可以为此使用Docker Compose Links 功能。如果您提供从其他容器到 kafka 容器的链接,Docker Compose 将确保您的其他容器可以通过其主机名访问 Kafka 容器 - 您无需知道其 IP 地址。

例子:

kafka:
    image: spotify/kafka
    ports:
      - "2181:2181"
      - "9092:9092"
    environment:
      ADVERTISED_HOST: 127.0.0.1
      ADVERTISED_PORT: 9092

myservice:
    image: foo
    links:
      - kafka:kafka

这将允许您的 myservice 容器通过 kafka 主机名访问 Kafka 容器。因此,从您的 myservice 容器中,您可以执行类似 curl http://kafka:9092 的操作来访问 Kafka 容器上的服务。

Docker-Compose 通过 DNS 执行此操作,它在您的容器中创建主机名/IP 映射,允许您在不知道其 IP 地址的情况下访问容器。

【讨论】:

  • 不客气 - 很高兴听到它现在正在工作。
【解决方案2】:

您的容器的 ip 将是您要查找的 ip。

将端口号(在您的情况下为 9092)附加到容器的 ip 以获取 kafka 正在服务的任何内容。

【讨论】:

    猜你喜欢
    • 2022-08-15
    • 2021-07-08
    • 1970-01-01
    • 1970-01-01
    • 2019-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多