我有一个 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_HOST
至 kafka
(或者你是如何命名你的Kafka容器的 docker-compose
).
2条答案
按热度按时间nnvyjq4y1#
你的容器的ip就是你要找的ip。
将端口号(在您的情况下是9092)附加到容器的ip以获取kafka正在服务的任何内容。
umuewwlo2#
您可以使用docker撰写链接功能进行此操作。如果您提供
kafka
容器,docker compose将确保您的其他容器可以通过其主机名访问kafka容器-您不必知道其ip地址。例子:
这将允许您
myservice
容器通过kafka
主机名。所以从你的myservice
容器,你可以这样做curl http://kafka:9092
访问Kafka容器上的服务。docker compose通过dns实现这一点,它在容器中创建主机名/ipMap,允许您在不知道其ip地址的情况下访问容器。