繁体   English   中英

Docker - PostgreSQL 无法连接到服务器:连接被拒绝 127.0.0.1:5432

[英]Docker - PostgreSQL could not connect to server: Connection refused 127.0.0.1:5432

尝试将我的 Symfony 4 应用程序 dockerise 与 PostgreSQL 一起运行

但是当我跑步时:

$ sudo docker-compose build

我有这个错误:

AbstractPostgreSQLDriver.php 第 73 行中:

驱动程序发生异常: SQLSTATE [08006] [7] 无法连接到服务器:连接被拒绝:
服务器是否在主机“127.0.0.1”上运行并接受
端口5432上的 TCP/IP 连接?

这是我的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

仅供参考

$ 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可以解决问题,但没有。

Symphony 的主机不会是 localhost。 它将是 db(服务名称)。 db 而不是 localhost。

您问题中的粘贴表明您的docker-compose.yml文件需要解决的一些问题:

  1. 您缺少.env文件的env_file:条目
  2. 您缺少php服务的image
  3. 您指定. 作为您的构建上下文(应该是指示Dockerfile所在位置的目录)
  4. 您将路径指定为 Dockerfile (应该是文件名,而不是目录)——我想这可能都有效,但读起来有点混乱
  5. -db- /home/debian/dev/symfony:/var/www/symfony:rw的缩进关闭——这可能不是问题,但仍然难以阅读

从您关于build失败并出现有关无法连接到数据库的错误的问题中,您能否更新您的问题并为 symfony 分享您的Dockerfile 我怀疑您需要删除对数据库连接的引用。

尝试运行:

docker-compose ps

见容器名称

设置 DATABASE_HOST=容器名称

DATABASE_NAME=db
DATABASE_HOST=## paste Container name
DATABASE_PORT=5432
DATABASE_USER=postgres
DATABASE_PASSWORD=root

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM