我在使用docker compose进行编排的docker中有Redis-Elasticsearch-Logstash-Kibana堆栈。
Redis将从远程位置接收日志,并将其转发给Logstash,然后再转发给惯用的Elasticsearch Kibana。
在docker-compose.yml中,我对“链接”的顺序感到困惑
Elasticsearch链接到任何人,而logstash链接到Redis和Elasticsearch
elasticsearch:
redis:
logstash:
links:
- elasticsearch
- redis
kibana:
links:
- elasticsearch
这个命令正确吗?选择“链接”方向的背后原因是什么?
我们为什么不说Elasticsearch与Logstash关联?
最佳答案
您可以使用Docker用户定义的网络来代替传统的容器链接方法。基本上,您可以为服务定义一个网络,然后在docker-compose文件中指示您希望容器在该网络上运行。如果所有容器都在同一网络上运行,则它们可以通过容器名称相互访问(DNS记录会自动添加)。
1):创建用户定义的网络docker network create pocnet
2):更新docker-compose文件
您想将容器添加到刚创建的网络中。您的docker-compose文件看起来像这样:
version: '2'
services:
elasticsearch:
image: elasticsearch
container_name: elasticsearch
ports:
- "{your:ports}"
networks:
- pocnet
redis:
image: redis
container_name: redis
ports:
- "{your:ports}"
networks:
- pocnet
logstash:
image: logstash
container_name: logstash
ports:
- "{your:ports}"
networks:
- pocnet
kibana:
image: kibana
container_name: kibana
ports:
- "5601:5601"
networks:
- pocnet
networks:
pocnet:
external: true
3):启动服务
docker-compose up
注意:您可能要打开一个新的Shell窗口以运行步骤4。
4):测试
进入Kibana容器,看看是否可以ping elasticsearch容器。
your__Machine:/ docker exec -it kibana bash
kibana@123456:/# ping elasticsearch
关于docker - docker 背后的基本原理撰写 “links”命令,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39902051/