我在使用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 bashkibana@123456:/# ping elasticsearch

关于docker - docker 背后的基本原理撰写 “links”命令,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39902051/

10-16 23:02
查看更多