我有一个laravel项目设置与码头(我目前运行它使用坞-合成)。该项目昨天运行良好,但今天已部分停止运行。
最令人惊讶的是,尽管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
docker-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/路由中得到以下错误:
所以..。我很感激你的帮助!
发布于 2021-09-03 03:59:01
我解决了。由于某些原因,我的MySQL .env
配置昨天运行良好,但我不得不将DB_HOST
设置为mysql
,这是在docker-compose.yml
中创建的服务的名称;因此,在更改它之后:
docker-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
我从this answer那里得到了这个想法,当我尝试的时候,它成功了!
我要把这个问题留给任何可能有这样一个模棱两可的问题的人。
编辑:奇怪的是,在这样做之后,migrate
命令就停止工作了。
我目前在整个应用程序的DB_HOST=0.0.0.0
和seeding
以及DB_HOST=mysql
之间进行振荡.如果有人想办法解决这个问题,请告诉我
发布于 2021-09-03 05:34:20
在Laravel中,您有config/database.php
,连接的所有设置都位于这里。项目中的根目录中还有一个.env
文件(每个人都使用它来节省时间)。这包含可以用于整个项目的变量。
在标准L5项目中,config/database.php
的MySql部分如下所示:
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', 'localhost'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
'engine' => null,
],
注意没有端口设置!
尽管在我的.env文件中,我设置了DB_PORT=33060。但该值(3306)从未被读取到config/database.php中。所以,不要像我这样愚蠢,忘记检查database.php文件。
FIX简单地将'port‘=> env('DB_PORT',3306)添加到您的config/database.php中,并在.env中设置这个值,比如这个DB_PORT=3306
发布于 2022-08-21 19:49:07
如果您使用的是sail,请尝试以下命令:
./vendor/bin/sail php artisan migrate:refresh --seed
使用默认Docker & Laravel 9从官方文档安装:https://laravel.com/docs/9.x#laravel-and-docker
https://stackoverflow.com/questions/69039208
复制相似问题