找出docker容器中的ip地址

cld4siwp  于 2021-06-07  发布在  Kafka
关注(0)|答案(2)|浏览(416)

我有一个 docker-compose 包含多个服务容器定义的文件。其中一个服务与 Apache Kafka 在同一个docker中运行。
我对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_HOSTkafka (或者你是如何命名你的Kafka容器的 docker-compose ).

nnvyjq4y

nnvyjq4y1#

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

umuewwlo

umuewwlo2#

您可以使用docker撰写链接功能进行此操作。如果您提供 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实现这一点,它在容器中创建主机名/ipMap,允许您在不知道其ip地址的情况下访问容器。

相关问题