如何在 Laravel Sail、Docker 上为每个租户创建新数据库

Bul*_*ent 5 multi-tenant laravel docker wsl-2 laravel-sail

我第一次使用 Laravel 8、 Docker 上的Tenancy For Laravel和 WSL2 开发多租户应用程序。当我尝试创建租户时出现问题。我想为每个租户创建一个新数据库,但创建数据库会出现以下错误:

SQLSTATE[42000]:
Syntax error or access violation:
1044 Access denied for user 'sail'@'%' to database 'tenant-a6d0813b-a546-428d-859a-15095724fb73'
(SQL: CREATE DATABASE `tenant-a6d0813b-a546-428d-859a-15095724fb73` CHARACTER SET `utf8mb4` COLLATE `utf8mb4_unicode_ci`) 
Run Code Online (Sandbox Code Playgroud)

我什至不知道应该从哪里开始,因为我对 Docker、WLS 和 Laravel Sail 还很陌生。在将此项目移至 Docker 之前,我能够在 Xammp 上创建数据库,但现在不行了。

docker-compose.yml 文件与 Laravel 提供的一样,除了包含 phpmyadmin 的部分:

phpmyadmin:
   image: phpmyadmin
   restart: always
   ports:
       - 8080:80
   environment:
       - PMA_HOST=mysql
   depends_on:
       - mysql
   networks:
       - sail
Run Code Online (Sandbox Code Playgroud)

Tri*_*tol 9

我今天遇到了完全相同的问题。

问题似乎是 .env 文件中设置的 db 用户“sail”。它没有创建数据库所需的权限。

使用命令打开 mysql 控制台sail mysql并尝试创建数据库会CREATE DATABASE test;导致相同的错误。

将 .env 文件中的参数更改为:

DB_USERNAME=root
Run Code Online (Sandbox Code Playgroud)

重建 docker 容器会导致 docker 创建日志中出现错误,因此 mysql 根本无法运行。

以 root 身份登录 docker mysql 并尝试为“sail”用户设置新权限也没有帮助。

最终对我有用的是使用标准构建应用程序

DB_USERNAME=sail
Run Code Online (Sandbox Code Playgroud)

启动应用程序sail up -d,然后将 .env 文件更改为

DB_USERNAME=root
Run Code Online (Sandbox Code Playgroud)

之后我用 重置了配置sail artisan config:clear


Bul*_*ent 4

我很久以前就问过这个问题了。我已经停止了那个项目的工作。现在,我开始了一个新的工作,面临着同样的问题。我在寻找解决方案时遇到了自己的问题。我找到了,在这儿:

您应该在终端上执行以下命令:

docker-compose exec mysql bash
mysql -u root -p
password: password
GRANT ALL PRIVILEGES ON *.* TO 'sail'@'%';
FLUSH PRIVILEGES;
EXIT;
exit
Run Code Online (Sandbox Code Playgroud)