Узел не может связаться с сервером postgres в docker compose - PullRequest
0 голосов
/ 25 мая 2020

Я использую приложение NodeJS и связанные с ним службы (Redis, Postgres) через docker -compose. Мое приложение NodeJS может легко достичь Redis, используя его имя и порт из моего файла docker -compose, но по какой-то причине я не могу достичь Postgres:

  Error: getaddrinfo EAI_AGAIN postgres
      at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:66:26)

My docker -составить файл:

services:
    api:
        build:
            context: ./
            dockerfile: Dockerfile
        ports:
            - "3001:3001"
        depends_on:
            - postgres
            - redis

    postgres:
        image: postgres:11.1
        ports:
            - "5432:5432"
        expose:
            - "5432"
        hostname: postgres
        environment:
            POSTGRES_USER: root
            POSTGRES_PASSWORD: root
            POSTGRES_DB: test
        restart: on-failure
        networks:
            - integration-tests
    redis:
        image: 'docker.io/bitnami/redis:6.0-debian-10'
        environment:
            # ALLOW_EMPTY_PASSWORD is recommended only for development.
            - ALLOW_EMPTY_PASSWORD=yes
            - REDIS_DISABLE_COMMANDS=FLUSHDB,FLUSHALL
        ports:
            - '6379:6379'
        hostname: redis
        volumes:
            - 'redis_data:/bitnami/redis/data'

Я пробовал как обычные lts, так и lts-alpine базовые изображения для моего NodeJS приложения. Я использую knex, который делегирует подключение к библиотеке pg ... Кто-нибудь знает, почему он даже не подключается? Я пробовал как запускать напрямую через docker-compose, так и через tilt.

1 Ответ

0 голосов
/ 25 мая 2020

Добавляя:

        networks:
            - integration-tests

Только для postgres, вы создаете отдельную сеть только для postgres. По умолчанию docker -compose создает сеть для всего вашего контейнера внутри одного файла с именем: <project-name>_default. Вот почему при использовании docker -compose все контейнеры в одном файле могут связываться, используя свое имя.

Указав сеть для postgres, вы «просите» docker -compose не используйте для этого сеть по умолчанию.

У вас есть 2 решения: - Удалите инструкцию для возврата к сети по умолчанию - Добавьте инструкцию сетей ко всем другим контейнерам в вашем проекте / или только к тем, кому она нужна

Примечание : по умолчанию, docker -compose добавит к имени проекта префикс всего вашего объекта (контейнера, сетей, тома). Имя проекта по умолчанию - это имя текущего каталога.

...