gpt4 book ai didi

php - Laravel 与 Docker 连接 MySQL 的问题

转载 作者:可可西里 更新时间:2023-11-01 08:08:52 24 4
gpt4 key购买 nike

我使用 Docker 设置 Laravel 的步骤:在我的本地系统中,我没有安装 PHP、Composer、Apache、MySQL、phpMyAdmin 等。我的系统中只安装了 Git 和 Docker。

  1. git 克隆 https://github.com/laravel/laravel.git

  2. 在项目根目录下创建 docker-composer.yml 文件。

    version: "3"
    services:
    db:
    image: mysql:5.7
    environment:
    MYSQL_ROOT_PASSWORD: pass
    MYSQL_DATABASE: db
    MYSQL_USER: root
    MYSQL_PASSWORD: pass
    ports:
    - "3306:3306"

    web:
    image: php:7.2.2-apache
    container_name: web_laravel
    depends_on:
    - db
    volumes:
    - ./:/var/www/html/
    ports:
    - "4000:80"
    stdin_open: true
    tty: true

    phpmyadmin:
    image: phpmyadmin/phpmyadmin
    depends_on:
    - db
    external_links:
    - db:mysql
    ports:
    - "9191:80"
    environment:
    MYSQL_USER: root
    MYSQL_PASSWORD: pass
    MYSQL_ROOT_PASSWORD: pass
    PMA_HOST: db
  3. 从项目根目录运行命令。

    docker-compose up

    此命令将从本地缓存或 Docker Hub 中获取所有图像(php:7.2.2-apache、phpmyadmin/phpmyadmin、mysql:5.7),并为这些图像启动三个容器。

    现在我需要与名为 web_laravel 的 php:7.2.2-apache 图像容器进行交互(请参阅 yml 文件),以便我可以添加 PHP 扩展和 Composer 来运行 Laravel 项目。

  4. 运行此命令。

    docker exec -it web_laravel /bin/bash

    现在我可以在运行的 web_laravel 容器中运行任何命令,所以我已经安装了 Composer 和 PHP 扩展,如 mbstrings、pdo、pdo_mysql 等。

    然后使用 composer install 安装 Laravel 依赖项,为存储和 bootstrap/cache 文件夹设置权限并运行 php artisan key:generate。

    打开 localhost:4000 我可以看到 Laravel 主页:

    enter image description here

此时一切都很好。当我连接到我的数据库时,问题现在就开始了。

下一个要运行的命令(我仍在容器中):

  php artisan migrate

错误是:

 Illuminate\Database\QueryException  : SQLSTATE[HY000] [2002] No such file or directory (SQL: select * from information_schema.tables where table_schema = blog and table_name = migrations)

Illuminate\Database\QueryException : could not find driver (SQL: select * from information_schema.tables where table_schema = blog and table_name = migrations)

enter image description here

enter image description here

我可以打开 phpMyAdmin ( http://localhost:9191 ) 并且可以创建数据库、表和操作相关的数据库。我有一个名为 blog 的数据库。

MySQL 环境变量:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=blog
DB_USERNAME=root
DB_PASSWORD=pass

最佳答案

我认为你有几个问题,第一个是 laravel .env 配置应该指向 MySQL 容器,而不是本地主机

DB_HOST=127.0.0.1

应该是

DB_HOST=db

而您提到的另一个错误与 Docker 无关

Illuminate\Database\QueryException : SQLSTATE[HY000] [2002] No such file or directory (SQL: select * from information_schema.tables where table_schema = blog and table_name = migrations)

Illuminate\Database\QueryException : could not find driver (SQL: select * from information_schema.tables where table_schema = blog and table_name = migrations)

这可能与缺少依赖项有关,你应该运行

composer 需要 doctrine/dbal

另外,你说:

now I have access to run any command in running web_laravel container so I've installed composer and php extensions like mbstrings, pdo, pdo_mysql etc.

您应该在 PHP 7/Apache 镜像之上构建您的镜像,并将它们添加到构建 dockerfile,因为您的更改(php 扩展、配置等)不是持久的。我建议你使用 Laradock或任何其他现有的 Laravel/docker 环境。

关于php - Laravel 与 Docker 连接 MySQL 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53921378/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com