postgresql — Docker SQLSTATE [08006] для службы pgsql только из службы php

Не уверен, что мой заголовок точен, но вот моя проблема. Я работаю с базовым сайтом laravel на Docker и не могу заставить сам сайт подключиться к службе PostgreSQL. Я опубликую docker-compose.yml ниже. Когда я бегу php artisan migrate я не получаю ошибок, и все это работает. Я даже могу использовать свой клиент Postico PostgreSQL для подключения к БД и выполнения запросов. Но, когда я пытаюсь подключиться к БД с сайта, появляется сообщение об ошибке:

SQLSTATE[08006] [7] could not connect to server: Connection refused Is the server running on host "127.0.0.1" and accepting TCP/IP connections on port 5433?

Вот мои настройки клиента PostgreSQL (которые работают):

Host: 127.0.0.1
Port: 5433
User: homestead
Password: homestead
Database: homestead

Я возился с различными настройками и вещами, так что вот мой docker-compose.ymlХотя я уверен, что есть вещи, которые мне там не нужны:

version: '2'

services:
php:
image: jguyomard/laravel-php:7.2
build:
context: .
dockerfile: infrastructure/php/Dockerfile
volumes:
- ./:/var/www/
- $HOME/.composer/:$HOME/.composer/
networks:
- default
links:
- postgresql
- redis

nginx:
image: jguyomard/laravel-nginx:1.13
build:
context: .
dockerfile: infrastructure/nginx/Dockerfile
ports:
- 81:80
networks:
- default
links:
- postgresql
- redis

postgresql:
image: postgres:9.6-alpine
volumes:
- pgsqldata:/var/lib/postgresql/data
environment:
- "POSTGRES_DB=homestead"- "POSTGRES_USER=homestead"- "POSTGRES_PASSWORD=homestead"ports:
- "5433:5432"networks:
- default

redis:
image: redis:4.0-alpine
command: redis-server --appendonly yes
ports:
- "6379:6379"networks:
- default

#  elastic:
#    image: elasticsearch:5.5-alpine
#    ports:
#        - "9200:9200"
volumes:
pgsqldata:

networks:
default:

Любые мысли о том, почему сайт не может подключиться к БД?

мой docker network ls выход:

NETWORK ID      NAME               DRIVER        SCOPE
2bf85424f466    bridge             bridge        local
c29d413f768e    host               host          local
0bdf9db30cd8    none               null          local
f3d9cb028ae3    my-app_default     bridge        local

0

Решение

Сообщение об ошибке спросить Is the server running on host "127.0.0.1" но в вашем случае PostgreSQL работает в другом контейнере Docker, который не 127.0.0.1 ссылка на приложение php, поэтому измените хост сервера на postgresql внутри вашего приложения php.

И для модифицированной ошибки, это потому, что вы использовали порт 5433 внутри приложения php, которое является портом хост-машины и предназначено для использования вне контейнера докера (для хост-машины, поэтому ваш клиент Postico PostgreSQL работал). Но порт, который вы должны использовать внутри докерской сети, 5432 изменить порт сервера на 5432 внутри вашего приложения php.

И вы сделали составной файл сложным, определив сеть на каждом хосте как сеть по умолчанию. (Вы можете следить за этим ссылка на сайт для получения более подробной информации) Если у вас нет требования для этого, вам не нужно это делать, так как docker-compose развернет все контейнеры в одной сети.

И вам не нужно использовать ссылки, они осуждается. Когда несколько контейнеров находятся в одном файле docker-compose.yml, они автоматически развертываются в одной и той же сети.

Так что этот упрощенный файл будет рекомендован.

version: '2'

services:
php:
image: jguyomard/laravel-php:7.2
build:
context: .
dockerfile: infrastructure/php/Dockerfile
volumes:
- ./:/var/www/
- $HOME/.composer/:$HOME/.composer/

nginx:
image: jguyomard/laravel-nginx:1.13
build:
context: .
dockerfile: infrastructure/nginx/Dockerfile
ports:
- 81:80

postgresql:
image: postgres:9.6-alpine
volumes:
- pgsqldata:/var/lib/postgresql/data
environment:
- "POSTGRES_DB=homestead"- "POSTGRES_USER=homestead"- "POSTGRES_PASSWORD=homestead"ports:
- "5433:5432"
redis:
image: redis:4.0-alpine
command: redis-server --appendonly yes
ports:
- "6379:6379"
#  elastic:
#    image: elasticsearch:5.5-alpine
#    ports:
#        - "9200:9200"
volumes:
pgsqldata:
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector