php - Laravel 8 迁移工作,但 MySQL 拒绝连接
问题描述
我有一个带有 docker 的 laravel 项目设置(我目前使用 docker-compose 运行它)。该项目昨天运行良好,但今天已部分停止运行。
最令人惊奇的是,虽然migrations
工作seeders
得很好,但我无法从数据库中获取任何结果!我已经尝试清除缓存和我能找到的所有其他指南,但它们根本不起作用。我的文件内容是:
.env
APP_NAME=bookshelf
APP_ENV=local
APP_KEY=base64:/PqZs+/8YfRYtCth0U5LATD5oOXCN/5pdAs5onk1z7U=
APP_DEBUG=true
APP_URL=http://0.0.0.0:8000
DB_CONNECTION=mysql
DB_HOST=0.0.0.0
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=laravel
DB_PASSWORD=secret
码头工人-compose.yml
version: "3.7"
services:
web:
image: $COMPOSE_PROJECT_NAME
container_name: $COMPOSE_PROJECT_NAME-laravel
ports:
- 8000:8000
volumes:
- ./:/app
mysql:
image: mysql:8
container_name: $COMPOSE_PROJECT_NAME-mysql
ports:
- '3306:3306'
environment:
MYSQL_USER: laravel
MYSQL_PASSWORD: secret
MYSQL_DATABASE: laravel
MYSQL_ROOT_PASSWORD: secret
phpmyadmin:
image: phpmyadmin/phpmyadmin:latest
environment:
PMA_HOST: 'mysql'
ports:
- '127.0.0.1:8080:80'
Dockerfile
FROM php:8.0
RUN apt-get update && apt-get install -y \
libzip-dev \
&& docker-php-ext-install \
pdo_mysql \
zip
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
WORKDIR /app
COPY . /app
RUN composer install
CMD php artisan serve --host=0.0.0.0 --port=8000
EXPOSE 8000
正如我所说,以下命令完全可以正常工作:
php artisan migrate
php artisan db:seed
但是当我想加载一个页面时Controller@method
:
public function index()
{
$records = Book::all();
...
从books
表中获取结果,我在相应的页面/url/路由中收到以下错误:
所以......我很感激任何帮助!
解决方案
我解决了。出于某种原因,我的 MySQL.env
配置昨天运行良好,但我必须将服务名称设置DB_HOST
为mysql
,创建于docker-compose.yml
; 所以,在改变它之后:
码头工人-compose.yml
version: "3.7"
services:
...
mysql: # <- I copied this name
image: mysql:8
container_name: $COMPOSE_PROJECT_NAME-mysql
ports:
- '3306:3306'
environment:
MYSQL_USER: laravel
MYSQL_PASSWORD: secret
MYSQL_DATABASE: laravel
MYSQL_ROOT_PASSWORD: secret
...
.env
DB_CONNECTION=mysql
DB_HOST=mysql # <- pasted it here
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=laravel
DB_PASSWORD=secret
我从这个答案中得到了这个想法,当我尝试它时,它奏效了!
我会把这个问答留给其他可能有这种模棱两可问题的人。
编辑:奇怪的是,这样做之后,migrate
命令已经停止工作。
我目前在整个应用程序中为和其他目的之间摇摆不定...DB_HOST=0.0.0.0
如果migrations
有人对此有解决方案,请告诉我seeding
DB_HOST=mysql
推荐阅读
- typescript - 提取类型键的更易读的方法,其中所述键的值的类型符合接口?
- python - PyTorch 中层的类型及其激活函数有什么区别?
- python - 读取文件名末尾带有动态日期时间值的 xlsx 文件
- html - 根据弹性项目的数量确定容器的宽度
- javascript - Httpclient 返回未定义的响应
- gnuplot - 如何修复'GNUPlot不绘制二维轮廓数据的第一个点,通过绘制到表格生成
- javascript - 如何使用正则表达式仅获取字符串的特定部分?
- angular7 - 在 onsubmit 中收到 http 错误后重新验证 Angular 控件
- java - 使用 ProcessBuilder 在 Windows 上启动 java Minecraft 服务器
- javascript - Firebase 通知在关闭的 iOS RN 应用程序上不起作用