找出Docker容器中的IP地址

我有一个docker-compose文件和几个服务容器定义。 其中一个服务在同一个docker-compose运行中与Apache Kafka进行通信。

所以我有这样的kafkadocker定义:

  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环境中dynamic地执行此操作?

编辑

所以,正确的configuration应该是(谢谢你,@ 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容器)。

您可以使用Docker撰写链接function。 如果您从另一个容器提供了一个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来完成这个任务,它在你的容器中创build一个主机名/ IP映射,允许你在不知道IP地址的情况下访问容器。

您的容器的IP将是您正在寻找的IP。

追加端口号(在你的情况下9092)到容器的IP地址,以获得任何kafka服务。