Сборка Vapor + PostgreSQL + Nginx на Docker не работает должным образом

Я использую docker для создания Vapor, PostgreSQL и Nginx для проекта, мой docker-compose.yml, например так:

version: "3.6"

services:
    vapor:
        build:
            context: ./vapor
        image: ${CURRENT_VAPOR_IMG}
        ports:
            - 8080:8080
        volumes:
            - ${HOST_ROOT}:${CONTAINER_ROOT}
        working_dir: ${CONTAINER_ROOT}
        tty: true
        entrypoint: bash
        networks:
            - x-net

    nginx:
        build:
            context: ./nginx
        image: ${CURRENT_NGINX_IMG}
        ports:
            - ${HOST_HTTP_PORT}:80
        volumes:
            - ${HOST_ROOT}:${CONTAINER_ROOT}
        networks:
            - x-net

    psql:
        image: ${CURRENT_DB_IMG}
        ports:
            - 5432:5432
        environment:
            - POSTGRES_DB=xxx
            - POSTGRES_USER=xxx
            - POSTGRES_PASSWORD=pass
        volumes:
            - ~/x/x-db:/var/lib/postgresql/data
    networks:
        - x-net

networks:
    x-net:
         driver: bridge

После того, как я запустил весь контейнер, запустив docker-compose up, затем войдя в контейнер steam для сборки и запуска проекта, он выдаст консоль сообщение об ошибке:

NIO.ChannelError.connectFailed(NIO.NIOConnectionError(host: "localhost", port: 5432, dnsAError: nil, dnsAAAAError: nil, connectionErrors: [NIO.SingleConnectionFailure(target: [IPv6]localhost/::1:5432, error: connection reset (error set): Connection refused (errno: 61)), NIO.SingleConnectionFailure(target: [IPv4]localhost/127.0.0.1:5432, error: connection reset (error set): Connection refused (errno: 61))]))

Затем я запускаю проект steam на локальной машине и поддерживаю работу контейнера psql, он работает нормально, например, завершил первую миграцию с моделями.

Есть ли ошибки в моей конфигурации докера или каких-либо других?

2 ответа

Решение

Чтобы подключиться к базе данных внутри контейнера, не используйте localhost в качестве хоста db, а имя своего контейнера db. Так что в вашем случае host это psql. Здесь ваш docker compose не очень хорошо отформатирован psql и nginx должен иметь еще одну вкладку. Но, возможно, это просто ТАК неправильно форматировать.

Вы не можете иметь localhost в docker compose, хост для вашей базы данных psql в этом случае.

Другие вопросы по тегам