У меня проблема с подключением к контейнеру 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 и:
Но когда я пытаюсь подключиться к 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 на:
но ничего из вышеперечисленного не работает.
Мы будем благодарны за любую помощь.
Спасибо






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