找出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_HOST
到kafka
(或你如何命名您的卡夫卡容器在docker-compose
内)。
答
您可以使用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地址的情况下访问容器。
答
您的容器的IP将是您正在寻找的IP。
将端口号(在您的情况下为9092)添加到容器的IP以获取任何kafka正在提供的服务。
您应该能够使用'kafka'作为主机名连接到'kafka'容器。 – tkausl