httpoison не может получить доступ кasticsearch из веб-приложения в среде докера - PullRequest
0 голосов
/ 17 мая 2019

При попытке вызвать проект с помощью веб-приложения (используя elixir / ecto в качестве языка бэкэнда), базы данных postgres ,asticsearch и kibana с использованием следующего файла docker-compose.yaml:

version: '3'
services:
  registry:
    restart: always
    image: registry:2
    ports:
      - 443:443
    volumes:
      - /path/data:/var/lib/registry
      - /path/certs:/registry/certs
      - /path/auth:/registry/auth
  webapp:
    build:
      context: ../../../
      dockerfile: config/docker/dev/Dockerfile-dev
    container_name: MyWebApp-dev
    image: 'localhost:443/123'
    environment:
      - ELASTICSEARCH_URL=http://localhost:9200
      - ELASTICSEARCH_HOST=localhost
    ports:
      - "4000:4000"
      - "3000:3000"
    depends_on:
      - db
      - elasticsearch
      - kibana
    networks:
      - esnet
  db:
    image: postgres:10
    container_name: db
    environment:
      - POSTGRES_USER=paul
      - POSTGRES_PASSWORD=SilviaZita1
      - POSTGRES_DB=snitch_dev
    networks:
      - esnet
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.0.1
    container_name: elasticsearch
    environment:
      - node.name=elasticsearch
      - discovery.seed_hosts=es02
      - cluster.initial_master_nodes=elasticsearch,es02
      - cluster.name=docker-cluster
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - esdata01:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
      - 9300:9300
    networks:
      - esnet
  es02:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.0.1
    container_name: es02
    environment:
      - node.name=es02
      - discovery.seed_hosts=elasticsearch
      - cluster.initial_master_nodes=elasticsearch,es02
      - cluster.name=docker-cluster
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - esdata02:/usr/share/elasticsearch/data
    networks:
      - esnet

  kibana:
    image: docker.elastic.co/kibana/kibana:7.0.1
    ports:
      - "5601:5601"
    container_name: kibana
    environment:
      - ELASTICSEARCH_URL=http://elasticsearch:9200
      - ELASTICSEARCH_HOST=elasticsearch
    depends_on:
    - elasticsearch
    networks:
      - esnet

volumes:
  esdata01:
    driver: local
  esdata02:
    driver: local

networks:
  esnet:  

Я получаю следующую ошибку:

** (Mix) Продукты индекса не могут быть созданы. MyWebApp-dev | MyWebApp-dev | % HTTPoison.Error {id: nil, причина:: econnrefused}

Кто-нибудь знает, как решить эту проблему?

1 Ответ

0 голосов
/ 17 мая 2019

Я полагаю, вы получаете сообщение об ошибке "Отказано в соединении", когда вы пытаетесь получить доступ к elasticsearch с вашего webapp.

Использование localhost внутри контейнера относится к самому себе. В docker-compose, если вы хотите получить доступ к другой службе, которая прослушивает определенный порт, вы должны создать URL-адрес в виде http://<service-name>:<port>

В вашем случае:

Если вы хотите получить доступ к услуге elasticsearch, которая прослушивает 9200 из контейнера webapp, тогда ваш URL должен быть http://elasticsearch:9200

В вашем webapp определении сервиса для ELASTICSEARCH_URL и ELASTICSEARCH_HOST используйте elasticsearch вместо localhost.

Используйте следующий составной файл:

version: '3'
services:
  registry:
    restart: always
    image: registry:2
    ports:
      - 443:443
    volumes:
      - /path/data:/var/lib/registry
      - /path/certs:/registry/certs
      - /path/auth:/registry/auth
  webapp:
    build:
      context: ../../../
      dockerfile: config/docker/dev/Dockerfile-dev
    container_name: MyWebApp-dev
    image: 'localhost:443/123'
    environment:
      - ELASTICSEARCH_URL=http://elasticsearch:9200
      - ELASTICSEARCH_HOST=elasticsearch
    ports:
      - "4000:4000"
      - "3000:3000"
    depends_on:
      - db
      - elasticsearch
      - kibana
    networks:
      - esnet
  db:
    image: postgres:10
    container_name: db
    environment:
      - POSTGRES_USER=paul
      - POSTGRES_PASSWORD=SilviaZita1
      - POSTGRES_DB=snitch_dev
    networks:
      - esnet
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.0.1
    container_name: elasticsearch
    environment:
      - node.name=elasticsearch
      - discovery.seed_hosts=es02
      - cluster.initial_master_nodes=elasticsearch,es02
      - cluster.name=docker-cluster
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - esdata01:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
      - 9300:9300
    networks:
      - esnet
  es02:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.0.1
    container_name: es02
    environment:
      - node.name=es02
      - discovery.seed_hosts=elasticsearch
      - cluster.initial_master_nodes=elasticsearch,es02
      - cluster.name=docker-cluster
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - esdata02:/usr/share/elasticsearch/data
    networks:
      - esnet

  kibana:
    image: docker.elastic.co/kibana/kibana:7.0.1
    ports:
      - "5601:5601"
    container_name: kibana
    environment:
      - ELASTICSEARCH_URL=http://elasticsearch:9200
      - ELASTICSEARCH_HOST=elasticsearch
    depends_on:
    - elasticsearch
    networks:
      - esnet

volumes:
  esdata01:
    driver: local
  esdata02:
    driver: local

networks:
  esnet:  
...