UnhandledPromiseRejectionWarning: ошибка: getaddrinfo ENOTFOUND в nodejs, работающем на docker-swarm

Как вы можете найти ниже в файле docker-compose.yml, который размещен в стеке Portainer в режиме Docker-Swarm. Контейнеры в Portainer работают нормально, но похоже, что сервер лампы не может связаться с Redis и выдает следующую ошибку:

(node:1) UnhandledPromiseRejectionWarning: Error: getaddrinfo ENOTFOUND cache
      at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:67:26)

Вот моя конфигурация:

введите здесь описание изображения

version: '3.7'
services:
  server:
    image: 'bidmcdigitalpsychiatry/lamp-server:latest'
    environment:
      - HTTPS=off
      - SCHEDULER=on
      - ROOT_KEY=xxxx
      - CDB=http://admin:xxxx@database:5984/  
      - PUSH_API_GATEWAY=xxxx
      - PUSH_API_KEY=xxxx   
      - REDIS_HOST=redis://cache:6379/0
      - NATS_SERVER=message_queue:4222
    networks:
      - public
    deploy:
      mode: replicated
      labels:
        traefik.enable: 'true'
        traefik.http.routers.lamp_server.entryPoints: 'websecure'
        traefik.http.routers.lamp_server.rule: 'Host(`api.example.com`)'
        traefik.http.routers.lamp_server.tls.certresolver: 'default'
        traefik.http.services.lamp_server.loadbalancer.server.port: 3000
      placement:
        constraints:
          - node.role == manager
  database:
    image: apache/couchdb:latest
    volumes:
      - /home/azureuser/data/couchdb:/opt/couchdb/data
    networks:
      - public
    environment:
       - COUCHDB_USER=admin
       - COUCHDB_PASSWORD=xxxxx
    deploy:
      mode: replicated
      labels:
        traefik.enable: 'true'
        traefik.http.routers.lamp_db.entryPoints: 'websecure'
        traefik.http.routers.lamp_db.rule: 'Host(`db.example.com`)'
        traefik.http.routers.lamp_db.tls.certresolver: 'default'
        traefik.http.services.lamp_db.loadbalancer.server.port: 5984
      placement:
        constraints:
          - node.role == manager
  cache:
    image: redis:6.0.8-alpine
    healthcheck:
      test: redis-cli ping
    deploy:
      mode: replicated
      update_config:
        order: stop-first
        failure_action: rollback
      placement:
        constraints:
          - node.role == manager
  message_queue:
    image: nats:2.1.9-alpine3.12
    healthcheck:
      test: wget --no-verbose --tries=1 --spider http://localhost:8222/varz || exit 1
    deploy:
      mode: replicated
      update_config:
        order: start-first
        failure_action: rollback
      placement:
        constraints:
          - node.role == manager
networks:
  public:
    external: true

Любые идеи, как решить эту проблему?


person kriskk    schedule 30.12.2020    source источник


Ответы (1)


Ваша служба сервер находится в общедоступной сети и не может видеть другие службы. Вы можете исправить это, просто добавив частную сеть, например:

networks:
  private:
  public:
    external: true

И использовать его в других сервисах:

services:
  server:
    ...
    networks:
    - private
    - public
  cache:
    ...
    networks:
    - private
  ...
person x4k3p    schedule 30.12.2020
comment
Большое спасибо за ваше предложение. Я пытался внести эти изменения, см. здесь pastebin.com/65xMK9wF, но все равно получаю следующую ошибку (узел :1) UnhandledPromiseRejectionWarning: Ошибка: кеш getaddrinfo ENOTFOUND в GetAddrInfoReqWrap.onlookup [как при завершении] (dns.js:67:26) - person kriskk; 30.12.2020
comment
Вы получаете это после полной очистки и полной перезагрузки? - person x4k3p; 30.12.2020
comment
Твое право. Я сделал сеть сервера - частной и общедоступной, и теперь ошибка исчезла. Большое спасибо, есть ли место, где я могу узнать об этих сетях, таких как официальная документация по докеру? - person kriskk; 30.12.2020
comment
Пожалуйста, примите ответ тогда. Вы можете попробовать katacoda katacoda.com/courses/docker-orchestration. много курсов и лабораторий udemy на github, если вы ищете. Удачи! - person x4k3p; 30.12.2020