簡體   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