【问题标题】:How can I connect from container(API) to container(elasticsearch)?如何从容器(API)连接到容器(elasticsearch)?
【发布时间】:2019-06-02 11:40:45
【问题描述】:

我有 2 个容器。其中一个是 Web API,另一个是弹性搜索。 当我在本地机器(没有容器)和 在docker容器中启动elasticsearch。我可以将数据索引到elasticsearch它的运行良好,并将url连接到elasticsearch,例如http://localhost:9200没有问题。

但是当我想使用 docker 容器和 elasticsearch 使用 docker 容器时出现一些问题,我无法使用相同的连接 url 将数据索引到 elasticsearch,例如 http://localhost:9200

所以我认为问题是关于连接 url,但我不确定。我的 docker 组合如下。

version: '3'
services:
    web:
      build: .
      ports:
       - "8080:80"
      network : 
        - host
      container_name : DataCollectorAPI
    elasticsearch:
        image: docker.elastic.co/elasticsearch/elasticsearch:7.1.0
        ports:
          - "9200:9200"
          - "9300:9300"
        environment:
          - discovery.type=single-node

【问题讨论】:

    标签: docker elasticsearch docker-compose


    【解决方案1】:

    你应该像这样链接容器

    web:
        ....
        links:
         - elasticsearch
        depends_on:
         - elasticsearch
    

    然后在您的 Web 容器中使用 elasticsearch 作为主机名。

    有关详细信息,请参阅docker-compose.yml 文档。

    您也可以直接使用其他容器名称作为主机名

    启用服务进行通信不需要链接 - 默认情况下,任何服务都可以使用该服务的名称访问任何其他服务。

    【讨论】:

    • 我不确定是否是这种情况 - docker-compose 将创建默认网络,因此无需使用 link 选项,此外,它已弃用 docker 功能,请参阅 docsdepends_on 选项用于按给定顺序启动容器,例如 - 请参阅 depends_on docs。但是depends_on 可以在这里用来表示应该在web 容器之前启动elasticsearch - 但是这个问题的问题是网络。
    【解决方案2】:

    但是当我想使用 docker 容器和 elasticsearch 使用 docker 容器时出现一些问题,我无法使用相同的连接 url 将数据索引到弹性搜索,例如 http://localhost:9200

    如果您想从您的web 容器访问elasticsearch 容器,您应该使用url elasticsearch:9200。默认情况下,docker-compose 将为其中定义的服务创建一个网络,并且所有容器都将加入这个网络,并使用 DNS 名称作为它们在 docker-compose 中的名称。当您从web 容器中使用http://localhost:9200 时,您正试图访问web 容器中的localhost - 而不是elasticsearch 之一。

    【讨论】:

      猜你喜欢
      • 2020-12-11
      • 1970-01-01
      • 1970-01-01
      • 2020-06-23
      • 1970-01-01
      • 1970-01-01
      • 2019-01-21
      • 1970-01-01
      • 2017-08-21
      相关资源
      最近更新 更多