Laravel - 未连接到 docker 上的数据库

问题描述 投票:0回答:2

我正在尝试使用 postgres db 运行 Laravel。 Docker 构建工作正常,我可以通过 url 访问应用程序,并且可以连接到数据库。但 laravel 无法建立与数据库的连接。

我使用 phpstorm 客户端与数据库的连接有效:

但是当我在 env 文件中使用相同的凭据时:

然后我有以下错误。

Doctrine\DBAL\Driver\PDOException:SQLSTATE[08006] [7] 无法 连接到服务器:连接被拒绝 服务器是否在主机“127.0.0.1”上运行并接受 端口 5432 上的 TCP/IP 连接?

在 /var/www/html/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php:31 27|父::__construct($dsn, (字符串) $user, (字符串) $password, (数组) $options); 28| $this->setAttribute(PDO::ATTR_STATEMENT_CLASS, [PDOStatement::class, []]); 29| $this->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 30| } catch (\PDOException $异常) {

31|抛出新的 PDOException($Exception); 32| } 33| } 34| 35| /**

Docker 配置: docker-compose

version: '3'
services:
  postgis:
    image: postgis/postgis
    volumes:
      - ./postgres/init.sql:/docker-entrypoint-initdb.d/init.sql
    environment:
      POSTGRES_USER: admin_db
      POSTGRES_PASSWORD: test123
    ports:
      - '5432:5432'
  php-hap:
    build: php-fpm-hap
    container_name: php-hap
    ports:
      - '9002:9002'
    volumes:
      - ../:/var/www/html
      - ./logs/happy_hours:/var/www/html/var/logs
    links:
      - postgis
  nginx:
    build: nginx
    ports:
      - '8080:80'
    links:
      - php-hap
    volumes_from:
      - php-hap
    volumes:
      - ./logs/nginx/:/var/log/nginx

初始化.sql

 CREATE USER happy_user WITH PASSWORD 'test';
    CREATE DATABASE happy_user_db;
    GRANT ALL PRIVILEGES ON DATABASE happy_user_db TO happy_user;

php-fpm dockerfile:

FROM php:7.4-fpm

RUN apt-get update && apt-get install -y \
        libfreetype6-dev \
        libjpeg62-turbo-dev \
        libpng-dev \
        nano \
        libxslt1.1 \
        libxslt1-dev \
        unzip \
        git \
        gnupg \
        libpq-dev \
    && docker-php-ext-configure gd --with-freetype --with-jpeg \
    && docker-php-ext-configure pgsql --with-pgsql=/usr/local/pgsql \
    && docker-php-ext-install -j$(nproc) gd xsl pdo pdo_pgsql

# Install xdebug
RUN pecl install xdebug-2.9.8 \
    && docker-php-ext-enable xdebug \
    && echo "error_reporting = E_ALL" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
    && echo "display_startup_errors = On" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
    && echo "display_errors = On" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
    && echo "xdebug.remote_enable=1" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
    && echo "xdebug.remote_connect_back=0" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
    && echo "xdebug.remote_port=9000" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
    && echo "xdebug.profiler_enable=1" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
    && echo "xdebug.profiler_output_dir=/tmp/snapshots" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
    && echo "xdebug.max_nesting_level=9999" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
    && echo "xdebug.profiler_enable_trigger=1" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
    && echo "xdebug.remote_log=/tmp/xdebug.log" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini

RUN apt-get update
RUN apt-get -y install curl gnupg
RUN curl -sL https://deb.nodesource.com/setup_14.x  | bash -
RUN apt-get -y install nodejs

RUN set -xe; \
    curl -fsSL https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -; \
    echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list; \
    apt-get update >/dev/null; \
    apt-get -y --no-install-recommends install >/dev/null \
        nodejs \
        yarn \
    ;\
    apt-get clean; rm -rf /var/lib/apt/lists/*;

ENV PHP_IDE_CONFIG "serverName=happy_hours_app"

RUN curl --insecure https://getcomposer.org/download/1.10.19/composer.phar -o /usr/bin/composer && chmod +x /usr/bin/composer

# Set timezone
RUN rm /etc/localtime
RUN ln -s /usr/share/zoneinfo/Europe/Warsaw /etc/localtime
RUN "date"

RUN printf '[PHP]\ndate.timezone = "Europe/Warsaw"\n' > /usr/local/etc/php/conf.d/tzone.ini

WORKDIR /var/www/html

ngnx 配置

server {
    listen       80;
    server_name  localhost;
    root /var/www/html/public;

    location / {
        try_files $uri @rewriteapp;
    }

    location @rewriteapp {
        rewrite ^(.*)$ /index.php/$1 last;
    }

    location ~ ^/index\.php(/|$) {
        fastcgi_pass php-hap:9000;
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param HTTPS off;
    }

    error_log /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
}

出了什么问题?

谢谢你。

laravel postgresql docker postgis
2个回答
4
投票

尝试在环境文件中将 DB_HOST 从 127.0.0.1 更改为 postgis,它对我有用。 像这样 :- DB_HOST=postgis


0
投票

我也遇到了同样的问题。它的工作原理是将 DB_HOST 更改为与 docker-compose 文件中的数据库服务相同的名称。

© www.soinside.com 2019 - 2024. All rights reserved.