如何修复Laravel中的“ SQLSTATE [HY000] [2002]连接被拒绝”错误(工匠在Docker中迁移)

时间:2019-02-15 11:46:27

标签: laravel docker docker-compose

当我尝试将命令php artisan migrate添加到docker文件时,发生错误:

  

SQLSTATE [HY000] [2002]连接被拒绝(SQL:从information_schema.tables中选择*,其中table_schema =空缺列表,而table_name =迁移)

Dockerfile

FROM php:7.2.10-fpm
RUN apt-get clean && rm -rf /var/lib/apt/lists/*
RUN apt-get update -y && apt-get install -y \
build-essential \
mysql-client \
libpng-dev \
libjpeg62-turbo-dev \
libfreetype6-dev \
locales \
zip \
jpegoptim optipng pngquant gifsicle \
vim \
unzip \
git \
curl
RUN docker-php-ext-install pdo_mysql mbstring zip exif pcntl
RUN docker-php-ext-configure gd --with-gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ --with-png-dir=/usr/include/
RUN docker-php-ext-install gd
WORKDIR /app
COPY . /app
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
RUN composer install
RUN php artisan migrate
CMD php artisan serve --host=0.0.0.0 --port=80

docker-compose.yml

version: '2'
services:
  app:
    build: .
    ports:
      - "8000:80"
    volumes:
      - .:/app
    env_file: .env
    working_dir: /app
#    command: bash -c 'php artisan migrate && php artisan serve --host 0.0.0.0'
    depends_on:
      - db
    links:
      - db
  db:
    image: "mysql:5.7.25"
    environment:
      - MYSQL_ROOT_PASSWORD=newrootpassword
      - MYSQL_DATABASE=vacancylist
      - MYSQL_USER=root
      - MYSQL_PASSWORD=newrootpassword
      - MYSQL_ALLOW_EMPTY_PASSWORD=true
    volumes:
      - ./data/:/var/lib/mysql
    ports:
      - "3306:3306"

.env

DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=vacancylist
DB_USERNAME=root
DB_PASSWORD=newrootpassword

1 个答案:

答案 0 :(得分:0)

所有配置看起来都是正确的。我要解决的一件事是删除links部分-它是obsolete,不建议再使用。

我建议与php相比,数据库仅花费更多时间启动,这就是您的问题。 depends_on部分无法解决此问题-它仅控制启动顺序。尝试在php中添加一点停顿或使用wait-for-it工具箱-它是专门为这种情况而设计的:它会等到主机/端口可用为止。