我看了大约 23.74 个关于 laravel 和 mysql 容器的 docker-compose 教程!
有人能给我解释一下吗???
当我创建 docker-compose 文件时,我从 mysql 镜像创建了一个 mysql 容器。 然后 我必须输入如下所示的变量:
environment:
MYSQL_DATABASE: homestead
MYSQL_USER: homestead
MYSQL_PASSWORD: secret
MYSQL_ROOT_PASSWORD: secret
SERVICE_TAGS: dev
SERVICE_NAME: mysql
这些变量与我输入到我的 laravel 应用程序的 .env 文件中的变量有什么区别。 这些:
DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=laradb
DB_USERNAME=root
DB_PASSWORD=secret
有什么区别????
docker-compose 变量在做什么。这些 .env 变量在做什么。为什么我要设置两次?
我问的原因是因为每当我按照 docker 教程设置 mysql 时,如果我使用老师提供给我的各种变量,我只能让它工作?这是没有意义的。如果我想使用自己的变量值怎么办??! 一旦我尝试使用我自己的变量,数据库就会中断,我无法连接到它。 homestead 是用于 laravel 的一些特殊数据库实例吗?当我在没有 docker 的情况下在本地完成这一切时,这不是问题。
例如。上面的 docker-compose 变量用于创建一个 mysql 容器,然后当我使用 SQL workbench 连接到它时,我看到一个名为“homestead”的模式。如果我不想让那个 Schema 被称为 homestead,或者如果我想添加另一个 Schema,我该怎么办?它不允许我??(权限被拒绝)。
我现在花了 3 天时间尝试创建一个空的 Laravel 应用程序,该应用程序连接到一个单独容器中的数据库,该容器使用我可以通过 SQL Workbench 连接到的 mysql 以查看实际的数据库。我希望能够创建我想在 SQL Workbench 中使用的模式名称,然后能够将该模式设置为我的 laravel .env 文件中的数据库名称。
请帮助!你不必为我解决这个问题,但你能指出一些有用的 Material 来解释这些东西吗!!对于 docker-compose 特别是 mysql。如果可能,不希望在终端中使用 std docker 命令。
最佳答案
.env 文件 vs docker-compose.yml 环境:
:
它们有不同的作用域/优先级。
为 MySQL 传递环境变量:
MySQL 容器期望这些环境变量存在并具有值。
同样,Laravel 容器需要能够与 MySQL 容器通信,因此它需要匹配值,这就是重叠的原因。
bash 命令 printenv
可能有助于加强这一点,因为您可以看到哪些环境变量暴露给哪些容器(docker run msql_container_name bash -c 'printenv'
vs docker run laravel_container_name bash -c 'printenv'
).
您已经提到您不介意被发送给引用,所以我主要是这样做的 - 但如果仍然没有意义,我很乐意在这里或评论中详细说明/我不是解决主要问题。
关于mysql - Docker Compose mysql 环境变量与 Application .env 数据库变量。很困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65283322/