Docker - PostgreSQL не может подключиться к серверу: соединение отклонено 127.0.0.1:5432 - PullRequest
0 голосов
/ 22 октября 2019

Попытка докернизировать мое приложение Symfony 4, работающее с PostgreSQL

Но когда я работаю:

$ sudo docker-compose build

У меня появляется эта ошибка:

В AbstractPostgreSQLDriver.php строка 73:

Исключительная ситуация в драйвере: SQLSTATE [08006] [7] не удалось подключиться к серверу: соединение отклонено:
Сервер работает на хосте "127.0.0.1" и принимает
TCP / IP-соединения через порт 5432 ?

Вот мой docker-compose.yml файл:

version:  '3.7'
services:
  db:
    image: ${POSTGRES_IMAGE}
    restart: always
    environment:
      POSTGRES_DB: ${DATABASE_NAME}
      POSTGRES_USER: ${DATABASE_USER}
      POSTGRES_PASSWORD: ${DATABASE_PASSWORD}

  php:
    build:
      context: .
      dockerfile: ./docker/php/Dockerfile
    restart: on-failure
    user: 1000:1000
    volumes:
      - ./docker/php/uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
      - .:/var/www/symfony
    working_dir: /var/www/symfony
    depends_on:
      - db

Содержимое моего .env файла

DATABASE_NAME=db
DATABASE_HOST=127.0.0.1
DATABASE_PORT=5432
DATABASE_USER=postgres
DATABASE_PASSWORD=root

## Docker images (name and version)
PHP_IMAGE=php:7.3-fpm
POSTGRES_IMAGE=postgres

Также FYI :

$ sudo docker-compose config
debian@debian:~/dev/symfony$ sudo docker-compose config
services:
  db:
    environment:
      POSTGRES_DB: mrd
      POSTGRES_PASSWORD: root
      POSTGRES_USER: postgres
    image: postgres
    restart: always
  php:
    build:
      context: /home/debian/dev/symfony
      dockerfile: ./docker/php/Dockerfile
    depends_on:
    - db
    restart: on-failure
    user: 1000:1000
    volumes:
    - /home/debian/dev/symfony:/var/www/symfony:rw
    working_dir: /var/www/symfony
version: '3.7'

Мой Dockerfile:

FROM php:7.3-fpm

WORKDIR /var/www/symfony

RUN apt-get update

# Install Postgres PDO
RUN apt-get install -y libpq-dev \
 && apt-get install -y zip \
 && docker-php-ext-install pgsql pdo_pgsql \
 && apt-get install -y git

RUN pecl install apcu

RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \
    && php -r "if (hash_file('SHA384', 'composer-setup.php') === 'a5c698ffe4b8e849a443b120cd5ba38043260d5c4023dbf93e1558871f1f07f58274fc6f4c93bcfd858c6bd0775cd8d1') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" \
    && php composer-setup.php --filename=composer \
    && php -r "unlink('composer-setup.php');" \
    && mv composer /usr/local/bin/composer

RUN ls -larth
COPY . /var/www/symfony

RUN PATH=$PATH:/var/www/symfony/vendor/bin:bin

RUN pwd \
    && ls \
    && composer install --no-interaction --no-ansi --optimize-autoloader\
    && php bin/console doctrine:database:create \
    && php bin/console doctrine:schema:update --no-interaction \
    && php bin/console doctrine:fixtures:load --no-interaction

Кто-нибудь знает, почему это происходит? И как это решить?

Много искал и не мог найти ничего, что сработало. Думал, что depends_on: db сделает трюк, но нет.

Ответы [ 2 ]

0 голосов
/ 22 октября 2019

Вставки в вашем вопросе указывают на ряд вещей, которые необходимо решить с вашим docker-compose.yml файлом:

  1. Вам не хватает записи env_file: для вашего .env файла
  2. Вам не хватает image для службы php
  3. В качестве контекста сборки вы указываете . (это должен быть каталог, который указывает, где находится Dockerfile)
  4. Вы указываете путь в качестве вашего Dockerfile (который должен быть именем файла, а не каталогом) - я думаю, это может сработать, но немного сбивает с толку чтение
  5. Отступ для -db и - /home/debian/dev/symfony:/var/www/symfony:rw выключен - это может не быть проблемой, но все еще трудно прочитать

Из вашего вопроса о сбое build с ошибкой, связанной с невозможностью подключения к базе данных - вы можете обновитьсвой вопрос и поделитесь Dockerfile для symfony? Я подозреваю, что вам нужно удалить ссылку на соединение с базой данных.

0 голосов
/ 22 октября 2019

Хозяином симфонии не будет локальный хост. Это будет db (название сервиса). дБ вместо localhost.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...