找出Docker容器中的IP地址
我有一个docker-compose
文件和几个服务容器定义。 其中一个服务在同一个docker-compose运行中与Apache Kafka
进行通信。
所以我有这样的kafkadocker定义:
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环境中dynamic地执行此操作?
编辑
所以,正确的configuration应该是(谢谢你,@ 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
命名您的kafka容器)。
您可以使用Docker撰写链接function。 如果您从另一个容器提供了一个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
主机名访问Kafka容器。 因此,从您的myservice
容器中,您可以执行诸如curl http://kafka:9092
来访问Kafka容器上的服务。
Docker-Compose通过DNS来完成这个任务,它在你的容器中创build一个主机名/ IP映射,允许你在不知道IP地址的情况下访问容器。
您的容器的IP将是您正在寻找的IP。
追加端口号(在你的情况下9092)到容器的IP地址,以获得任何kafka服务。