找出docker容器中的IP地址

cod*_*tsu 3 apache-kafka docker docker-compose

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

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

  kafka:
    image: spotify/kafka
    ports:
      - "2181:2181"
      - "9092:9092"
    environment:
      ADVERTISED_HOST: 127.0.0.1
      ADVERTISED_PORT: 9092
Run Code Online (Sandbox Code Playgroud)

我在同一个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
Run Code Online (Sandbox Code Playgroud)

不要忘记设置ADVERTISED_HOSTto kafka(或者你如何命名你的kafka容器docker-compose).

nwi*_*ler 5

您可以使用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
Run Code Online (Sandbox Code Playgroud)

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

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