【问题标题】:Why docker compose links alias not working为什么 docker compose links 别名不起作用
【发布时间】:2021-09-25 17:49:54
【问题描述】:

我有一个 docker-compose.yml 文件:

version: '3'
services:
  elasticsearch:
    image: elasticsearch:7.13.3
    container_name: elasticsearch
    environment:
      - "cluster.name=elasticsearch" 
      - "discovery.type=single-node" 
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m" 
    volumes:
      - /Users/markcwg/mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins 
      - /Users/markcwg/mydata/elasticsearch/data:/usr/share/elasticsearch/data 
    ports:
      - 9200:9200
      - 9300:9300
  kibana:
    image: kibana:7.13.3
    container_name: kibana
    links:
      - elasticsearch:es 
    depends_on:
      - elasticsearch 
    environment:
      - "elasticsearch.hosts=http://es:9200" 
    ports:
      - 5601:5601
  logstash:
    image: logstash:7.13.3
    container_name: logstash
    volumes:
      - /Users/markcwg/mydata/logstash/logstash-springboot.conf:/usr/share/logstash/pipeline/logstash.conf 
    depends_on:
      - elasticsearch 
      - kibana
    links:
      - elasticsearch:es 
    ports:
      - 4560:4560

运行docker-compose up -d 为所有图像文件创建了容器。所有容器都运行成功但问题是容器之间不能通过别名进行交互(yml文件中的'es',使用'elasticsearch'就可以了)

我在 https://docs.docker.com/compose/ 上找不到答案

简而言之,为什么链接别名不起作用? 还是我哪里出错了?

【问题讨论】:

  • links 是一项旧功能,不应使用。正如您所注意到的,您已经可以使用elasticsearch 访问该服务,即使您删除了链接指令也是如此。不知道为什么别名不起作用。
  • @super - 在查看最新的docker compose spec 时,似乎links 又回来了
  • links: 仍然是 Compose 文件格式的一部分(删除它会破坏兼容性),但没有理由使用它; Docker 网络可以完成您过去需要链接的所有事情。

标签: docker elasticsearch docker-compose alias elk


【解决方案1】:

由于玩 docker 的内存限制,不得不丢弃 logstash 还必须使用 Volumes 而不是 Mount Binding,因为它会拒绝访问 elasticsearch 容器中的日志。

2 个容器已启动并正在交互,通过在 Kibana 中运行开发工具进行测试。

这是 docker-compose.yml 最后的样子

version: '3'
services:
  elasticsearch:
    image: elasticsearch:7.13.3
    container_name: elasticsearch
    environment:
      - "cluster.name=elasticsearch" 
      - "discovery.type=single-node" 
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m" 
    volumes:
      - myplugins:/usr/share/elasticsearch/plugins 
      - myesdata:/usr/share/elasticsearch/data
      - myeslogs:/usr/share/elasticsearch/logs
    ports:
      - 9200:9200
  kibana:
    image: kibana:7.13.3
    container_name: kibana
    links:
      - elasticsearch:es 
    depends_on:
      - elasticsearch 
    environment:
      - "elasticsearch.hosts=http://es:9200" 
    ports:
      - 5601:5601

volumes:
  myplugins:
  myesdata:
  myeslogs:

观察:

  1. 已通过删除 links 并将 es 替换为 localhost 来尝试相同的配置,如下所示,效果也很好。
 environment:
    - "elasticsearch.hosts=http://localhost:9200" 

原因是当没有提到network时,所有使用composer构建的容器都由基于父文件夹的默认网络绑定,以便容器可以交互。

  1. Mount Binding 导致 Elasticsearch 容器退出,从而导致 Kibana 无法启动。因此使用了音量。

  2. elasticsearch服务不需要第二个端口绑定9300:9300

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-04
    • 2016-12-16
    • 1970-01-01
    • 2016-02-16
    • 2016-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多