当我尝试将命令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
答案 0 :(得分:0)
所有配置看起来都是正确的。我要解决的一件事是删除links
部分-它是obsolete,不建议再使用。
我建议与php
相比,数据库仅花费更多时间启动,这就是您的问题。 depends_on
部分无法解决此问题-它仅控制启动顺序。尝试在php
中添加一点停顿或使用wait-for-it
工具箱-它是专门为这种情况而设计的:它会等到主机/端口可用为止。