我有一个带有多个服务容器定义的$v['content_en'] = preg_replace('/(<img[^>]+>(?:<\/img>)?)/i', '<figure>$1<figure />', $v['content_en']);
文件。其中一项服务在同一个docker-compose运行中与docker-compose
进行通信。
所以我有像这样的kafka docker定义:
Apache Kafka
我的服务定义在同一个docker-compose文件中。在服务的启动脚本中,我必须弄清楚Kafka实例的IP地址。
我知道,我可以使用类似 kafka:
image: spotify/kafka
ports:
- "2181:2181"
- "9092:9092"
environment:
ADVERTISED_HOST: 127.0.0.1
ADVERTISED_PORT: 9092
的内容来查找容器使用的IP地址。
但是我怎么能在docker-compose环境中动态地做呢?
修改
所以,正确的配置应该是(谢谢你,@ nwinkler):
docker inspect
不要忘记将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
)。
答案 0 :(得分: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
这将允许您的myservice
容器通过kafka
主机名访问Kafka容器。因此,从myservice
容器中,您可以执行curl http://kafka:9092
之类的操作来访问Kafka容器上的服务。
Docker-Compose通过DNS完成此操作,它会在您的容器中创建一个主机名/ IP映射,允许您在不知道其IP地址的情况下访问容器。
答案 1 :(得分:1)
你的容器的ip将是你正在寻找的ip。
将端口号(在您的情况下为9092)附加到容器的IP以获取kafka正在服务的任何内容。