Подключиться к postgres в laravel с помощью docker-контейнеров

У меня проблема с подключением к контейнеру postgres из laravel.

Они находятся на одном хосте, созданном как отдельные контейнеры докеров.

Вот YML

version: '3'
services:

  # The Application
  app:
    env_file: .env
    container_name: "laravel"
    build:
      context: ./
      dockerfile: app.dockerfile
    working_dir: /var/www
    volumes:
      - ./:/var/www
    environment:
      - "DB_PORT=${DB_PORT}"
      - "DB_HOST=${DB_HOST}"
      - "DB_USER=${DB_USER}"
      - "DB_PASS=${DB_PASS}"
      - "DB_DATABASE=${DB_DATABASE}"
      - "DB_SCHEMA=${DB_SCHEMA}"
    restart: 'always'
  # The Web Server
  web:
    container_name: "nginx"
    build:
      context: ./
      dockerfile: web.dockerfile
    working_dir: /var/www
    volumes:
      - ./:/app
    ports:
      - 8080:80
    restart: 'always'
  # The Database
  pgsql:
    image: postgres:10.1
    container_name: "baza"
    environment:
      - 'DB_USER=${DB_USER}'
      - 'DB_PASS=${DB_PASS}'
    volumes:
      - '${DB_VOLUME_LOCATION}:/var/lib/postgresql/data'
    ports:
      - "${DB_PORT}:${PGSQL_CONTAINER_PORT}"
    restart: 'always'

Вот переменные .env для Laravel 5:

# postgres
DB_HOST=localhost
DB_PORT=6666
DB_DATABASE=postgres
DB_USER=postgres
DB_PASS=postgres
PGSQL_CONTAINER_PORT=5432

докер ps

CONTAINER ID        IMAGE                   COMMAND                  CREATED             STATUS              PORTS                                 NAMES
2b8e667bcb08        postgres:10.1           "docker-entrypoint.s…"   4 seconds ago       Up 1 second         0.0.0.0:6666->5432/tcp                baza
58f1573bf016        laraveldockerized_app   "php-fpm"                4 seconds ago       Up 2 seconds        9000/tcp                              laravel
8a24bd5073a8        laraveldockerized_web   "nginx -g 'daemon of…"   4 seconds ago       Up 3 seconds        443/tcp, 0.0.0.0:8080->80/tcp         nginx

Я могу подключиться к postgres извне с помощью DataGrip и:

  • хост: localhost
  • порт: 6666
  • пользователь: postgres
  • пройти: postgres

Но когда я пытаюсь подключиться к Laravel, я получаю следующую ошибку:

SQLSTATE[08006] [7] could not connect to server: Connection refused Is the server running on host "localhost" (127.0.0.1) and accepting TCP/IP connections on port 6666? could not connect to server: Cannot assign requested address Is the server running on host "localhost" (::1) and accepting TCP/IP connections on port 6666? (SQL: select * from "dokuments")

Я попытался изменить DB_HOST в .env на:

  • база
  • pgsql
  • 127.0.0.1
  • 0.0.0.0

но ничего из вышеперечисленного не работает.

Мы будем благодарны за любую помощь.

Спасибо

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
2
0
4 545
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

добавить изменить имя базы данных

environment:
      - 'DB_USER=${DB_USER}'
      - 'DB_PASS=${DB_PASS}'
      # - 'DB_NAME=${DB_NAME}'
-------------------------------
DB_HOST=pgsql
DB_PORT=5432
DB_DATABASE=postgres
DB_USER=postgres
DB_PASS=postgres

Я не могу использовать DB_PORT = 5432, потому что на этом порту работает другой экземпляр postgres. Я оставил его на 6666 и сделал, как вы сказали, добавив DB_NAME в переменные env и в файл YML. Я пробовал с DB_HOST = pgsql и DB_HOST = baza (это имя контейнера). Не работает. SQLSTATE [08006] [7] не может преобразовать имя хоста "baza" в адрес: имя или служба неизвестны (SQL: выберите * из "документации")

Haris Hajdarevic 20.04.2018 10:48

Вам env действительно нужно использовать 5432, порт 6666 находится в вашей локальной сети, контейнеры будут связываться с 5432.

Paul Redmond 03.06.2018 20:37

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