在Docker容器中找到IP地址

3

我有一个包含多个服务容器定义的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容器名称)。


1
您应该能够使用 kafka 作为主机名连接到 kafka 容器。 - tkausl
2个回答

5
您可以使用 Docker Compose 链接 功能实现此目的。如果您从另一个容器提供到 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地址。

不用谢 - 很高兴听到它现在能正常工作。 - nwinkler

1

您的容器的IP地址将是您要查找的IP地址。

将端口号(在您的情况下为9092)添加到容器的IP地址上,以获取Kafka正在提供的内容。


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