Docker-compose развертывает redis, но app.js отказывается от соединения - PullRequest
0 голосов
/ 04 июня 2019

Я пытаюсь контейнеризировать приложение nodejs.Приложение работает нормально на контейнере узла, который я вручную устанавливаю и запускаю redis, но когда я пытаюсь запустить приложение в контейнере, используя мой файл docker-compose, я получаю сообщение об ошибке:

"Ошибка:Redis подключение к локальному узлу: 6379 не удалось - подключить ECONNREFUSED 127.0.0.1:6379 ".

Я опубликую ниже свой docker-compose.yml и dockerfile, а также журнал консоли, когда я попытаюсь выполнить docker-compose up.

FROM node:8-jessie

WORKDIR /var/api-console

COPY package*.json ./
RUN npm install

COPY . . /var/api-console/

RUN apt-get update
RUN apt-get install python

EXPOSE 3000
version: '3'
services:
  redis:
    image: redis
    ports:
      - "6379:6379"
    command:
      redis-server
    networks:
      - webnet
  app:
    build: ./
    volumes:
      - ./:/var/api-console
    ports:
      - 3000:3000
    command:
      node app.js
    networks:
      - webnet
networks:
  webnet:
AIDEVERSUSCATCH:api-console evan.dhillon$ docker-compose up
WARNING: The Docker Engine you're using is running in swarm mode.

Compose does not use swarm mode to deploy services to multiple nodes in a swarm. All containers will be scheduled on the current node.

To deploy your application across the swarm, use `docker stack deploy`.

Starting api-console_app_1   ... done
Starting api-console_redis_1 ... done
Attaching to api-console_app_1, api-console_redis_1
redis_1  | 1:C 04 Jun 2019 03:12:27.660 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
redis_1  | 1:C 04 Jun 2019 03:12:27.660 # Redis version=5.0.5, bits=64, commit=00000000, modified=0, pid=1, just started
redis_1  | 1:C 04 Jun 2019 03:12:27.660 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
redis_1  | 1:M 04 Jun 2019 03:12:27.661 * Running mode=standalone, port=6379.
redis_1  | 1:M 04 Jun 2019 03:12:27.661 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
redis_1  | 1:M 04 Jun 2019 03:12:27.661 # Server initialized
redis_1  | 1:M 04 Jun 2019 03:12:27.661 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
redis_1  | 1:M 04 Jun 2019 03:12:27.661 * DB loaded from disk: 0.000 seconds
redis_1  | 1:M 04 Jun 2019 03:12:27.661 * Ready to accept connections
app_1    | Express server listening on port 3000
app_1    | Error Error: Redis connection to localhost:6379 failed - connect ECONNREFUSED 127.0.0.1:6379
app_1    | Error AbortError: Redis connection lost and command aborted. It might have been processed.
app_1    | events.js:183
app_1    |       throw er; // Unhandled 'error' event
app_1    |       ^
app_1    | 
app_1    | Error: Redis connection to localhost:6379 failed - connect ECONNREFUSED 127.0.0.1:6379
app_1    |     at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1191:14)
api-console_app_1 exited with code 1

1 Ответ

1 голос
/ 04 июня 2019

Эта строка в вашем журнале объясняет сбой соединения

Соединение Redis с localhost: сбой 6379

Приложение узла ожидает, что redis будет на локальном хосте,это не так.

Вы можете предоставить адрес контейнера redis приложению вашего узла через переменную окружения.

Также добавьте в приложение приложение depen_on, чтобы оно ожидало при работе службы redis.Модифицированный файл композиции ниже

version: '3'
services:
  redis:
    image: redis
    ports:
      - "6379:6379"
    command:
      redis-server
    networks:
      - webnet
  app:
    build: ./
    volumes:
      - ./:/var/api-console
    ports:
      - 3000:3000
    depends_on:
      - redis
    environment:
      redis_server_addr: redis   
      #The dependent service address is set in environment variable which you can use in your app to connect
    command:
      node app.js
    networks:
      - webnet
networks:
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...