Как настроить Laravel с Postgres с помощью Laradock? не удалось подключиться к серверу: отказано в соединении через порт 5432 - PullRequest
1 голос
/ 03 апреля 2019

Я запускаю новый проект laravel и пытаюсь настроить его для запуска с контейнером laradock postgres.У меня есть контейнер postgres, работающий в порту 5432, но при запуске:

docker-compose exec workspace bash
php artisan migrate

я получаю сообщение об ошибке:

PDOException: :( "SQLSTATE [08006] [7] могне подключиться к серверу: соединение отклонено. Сервер работает на хосте "127.0.0.1" и принимает соединения TCP / IP на порту 5432? ")

Seens Laravel не может найти postgres.Я должен что-то упустить.

Чтобы построить контейнеры, я запустил это в my-laravel-app/laradock/:

docker-compose up -d nginx postgres

, и я могу проверить, все ли работает и работает нормально, набрав docker-compose ps:

           Name                          Command              State                     Ports
---------------------------------------------------------------------------------------------------------------
laradock_docker-in-docker_1   dockerd-entrypoint.sh           Up       2375/tcp
laradock_mysql_1              docker-entrypoint.sh mysqld     Exit 0
laradock_nginx_1              /bin/bash /opt/startup.sh       Up       0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp
laradock_php-fpm_1            docker-php-entrypoint php-fpm   Up       9000/tcp
laradock_postgres_1           docker-entrypoint.sh postgres   Up       0.0.0.0:5432->5432/tcp
laradock_workspace_1          /sbin/my_init                   Up       0.0.0.0:2222->22/tcp

Я набрал lsof -Pan -i tcp, и я вижу, что контейнер postgres работает в порту 5432:

com.docke 693 marcelo   18u  IPv4 0x483d469672d04c2b      0t0  TCP *:5432 (LISTEN)
com.docke 693 marcelo   21u  IPv6 0x483d46967542a923      0t0  TCP [::1]:5432 (LISTEN)

my laradock/.env:

### POSTGRES ##############################################

POSTGRES_DB=sicob_dev
POSTGRES_USER=postgres
POSTGRES_PASSWORD=secret
POSTGRES_PORT=5432
POSTGRES_ENTRYPOINT_INITDB=./postgres/docker-entrypoint-initdb.d

my .env:

DB_CONNECTION=pgsql
DB_HOST=127.0.0.1
DB_PORT=5432
DB_DATABASE=sicob_database
DB_USERNAME=postgres
DB_PASSWORD=secret

my config/database.php:

# ...
'default' => env('DB_CONNECTION', 'pgsql'),

'connections' => [
    # ...
    'pgsql' => [
        'driver' => 'pgsql',
        'host' => env('DB_HOST', '127.0.0.1'),
        'port' => env('DB_PORT', '5432'),
        'database' => env('DB_DATABASE', 'sicob_dev'),
        'username' => env('DB_USERNAME', 'postgres'),
        'password' => env('DB_PASSWORD', 'secret'),
        'charset' => 'utf8',
        'prefix' => '',
        'prefix_indexes' => true,
        'schema' => 'public',
        'sslmode' => 'prefer',
    ],
 ],
 # ...

1 Ответ

0 голосов
/ 22 мая 2019

Для будущих искателей: Ваш проект .env должен выглядеть следующим образом:

DB_CONNECTION=pgsql
DB_HOST=postgres *(no need to use the full container name, as Laradock exposes 'postgres' as the volume name (check docker-compose.yml))*
DB_PORT=5432
DB_DATABASE=mydb (postgress database you want to connect)
DB_USERNAME=root (postgres user)
DB_PASSWORD=root (postgres password)
...