首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Laravel 8迁移工作,但MySQL拒绝连接

Laravel 8迁移工作,但MySQL拒绝连接
EN

Stack Overflow用户
提问于 2021-09-03 03:39:59
回答 3查看 193关注 0票数 0

我有一个laravel项目设置与码头(我目前运行它使用坞-合成)。该项目昨天运行良好,但今天已部分停止运行。

最令人惊讶的是,尽管migrationsseeders工作得很好,但我无法从数据库中获取任何结果!我试过清理缓存和其他所有我能找到的向导,但它们根本就没有用。我的文件内容如下:

.env

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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

正如我说过的,以下命令工作完全正常:

代码语言:javascript
运行
复制
php artisan migrate
php artisan db:seed

但是,当我想用下面的Controller@method加载页面时

代码语言:javascript
运行
复制
public function index()
{
    $records = Book::all();
...

books表获取结果时,在相应的页/url/路由中得到以下错误:

所以..。我很感激你的帮助!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-09-03 03:59:01

我解决了。由于某些原因,我的MySQL .env配置昨天运行良好,但我不得不将DB_HOST设置为mysql,这是在docker-compose.yml中创建的服务的名称;因此,在更改它之后:

docker-compose.yml

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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.0seeding以及DB_HOST=mysql之间进行振荡.如果有人想办法解决这个问题,请告诉我

票数 1
EN

Stack Overflow用户

发布于 2021-09-03 05:34:20

在Laravel中,您有config/database.php,连接的所有设置都位于这里。项目中的根目录中还有一个.env文件(每个人都使用它来节省时间)。这包含可以用于整个项目的变量。

在标准L5项目中,config/database.php的MySql部分如下所示:

代码语言:javascript
运行
复制
'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

票数 0
EN

Stack Overflow用户

发布于 2022-08-21 19:49:07

如果您使用的是sail,请尝试以下命令:

代码语言:javascript
运行
复制
./vendor/bin/sail php artisan migrate:refresh --seed

使用默认Docker & Laravel 9从官方文档安装:https://laravel.com/docs/9.x#laravel-and-docker

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69039208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档