Php artisan migrate 在 docker 容器上不起作用



解决方案:Docker Inspect |GREP IP分别通过容器的IP和端口更新了运行容器的Postgres,并更新您的env db_host和db_port。

update :将postgres写入db_host是最佳实践,因为IP地址可能会更改。


我一直在寻找一天将数据库从Docker容器连接到我的Laravel应用程序,但是无论我尝试过什么,即使我可以通过Postico连接它,我也无法迁移我的数据库。我收到以下错误:

sqlstate [08006] [7]无法连接到服务器:连接拒绝 服务器是在主机" localhost"(127.0.0.1(上运行并接受 端口3306上的TCP/IP连接?

我的dockerfile:

FROM php:7.1.3-fpm-alpine
RUN apk update && apk add build-base
RUN apk add postgresql postgresql-dev 
  && docker-php-ext-configure pgsql -with-pgsql=/usr/local/pgsql 
  && docker-php-ext-install pdo pdo_pgsql pgsql
RUN apk add zlib-dev git zip 
  && docker-php-ext-install zip
RUN curl -sS https://getcomposer.org/installer | php 
        && mv composer.phar /usr/local/bin/ 
        && ln -s /usr/local/bin/composer.phar /usr/local/bin/composer
COPY . /app
WORKDIR /app
RUN composer install --prefer-source --no-interaction
ENV PATH="~/.composer/vendor/bin:./vendor/bin:${PATH}"

我的Docker-Compose文件:

version: '2'
services:
  nginx:
    image: nginx:1.11.10-alpine
    ports:
      - 3000:80
    volumes:
      - ./nginx.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - api
  api:
    build: .
    ports:
      - 9000:9000
    volumes:
      - .:/app
      - /app/vendor
    depends_on:
      - postgres
    environment:
      DATABASE_URL: postgres://foodorder@postgres/foodorder
  postgres:
    image: postgres:latest
    environment:
      POSTGRES_USER: foodorder
      POSTGRES_DB: foodorder
      POSTGRES_PASSWORD: 123123
    ports:
      - 3306:5432

我的env文件:

DB_CONNECTION = "pgsql"
DATABASE_CONNECTIONS_MASTER_PGSQL_HOST="localhost"
DATABASE_CONNECTIONS_MASTER_PGSQL_SCHEMA="foodorder"
DATABASE_CONNECTIONS_MASTER_PGSQL_DATABASE="foodorder"
DATABASE_CONNECTIONS_MASTER_PGSQL_PORT="3306"
DATABASE_CONNECTIONS_MASTER_PGSQL_USERNAME="foodorder"
DATABASE_CONNECTIONS_MASTER_PGSQL_PASSWORD="123123"

最后,在我的 database.php 中,

'default' => env('DB_CONNECTION', 'pgsql'),
'pgsql' => [
            'driver' => 'pgsql',
            'host' => env('DATABASE_CONNECTIONS_MASTER_PGSQL_HOST'),
            'port' => env('DATABASE_CONNECTIONS_MASTER_PGSQL_PORT'),
            'database' => env('DATABASE_CONNECTIONS_MASTER_PGSQL_DATABASE'),
            'username' => env('DATABASE_CONNECTIONS_MASTER_PGSQL_USERNAME'),
            'password' => env('DATABASE_CONNECTIONS_MASTER_PGSQL_PASSWORD'),
            'charset' => 'utf8',
            'prefix' => '',
            'schema' => env('DATABASE_CONNECTIONS_MASTER_PGSQL_SCHEMA'),
            'sslmode' => 'prefer',
        ],

检查数据库用户是否在localhost127.0.0.1上都可以访问。听起来您正在尝试连接到localhost,但仅对127.0.0.1授予访问,反之亦然。

最新更新