找出Docker容器中的IP地址

问题描述:

我有一个docker-compose文件,其中包含多个服务容器定义。其中一项服务与Apache Kafka在同一码头组合运行中进行通信。找出Docker容器中的IP地址

所以我有卡夫卡泊坞窗的定义是这样的:

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

我有同样的搬运工,撰写文件,我的服务定义。在服务的启动脚本中,我必须弄清楚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_HOSTkafka(或你如何命名您的卡夫卡容器在docker-compose内)。

+1

您应该能够使用'kafka'作为主机名连接到'kafka'容器。 – tkausl

您可以使用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主机访问卡夫卡容器。因此,从您的myservice容器中,您可以执行诸如curl http://kafka:9092之类的操作来访问Kafka容器上的服务。

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

+0

它的工作原理。真棒!谢谢。 – leshkin

+0

不客气 - 很高兴听到它现在正在工作。 – nwinkler

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

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