mysql - Docker Compose mysql 环境变量与 Application .env 数据库变量。很困惑

标签 mysql laravel docker docker-compose mysql-workbench

我看了大约 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/

相关文章:

php - 在带有种子的 laravel 8 中,我有这个问题目标类 [TableSeeder] 不存在

docker - 无法在工具箱中找到gradle.properties

mysql - 按 x 分组,其中 y = A 和 B 和 C

laravel - IronMq + Laravel4 : How make it working

mysql - 多个数据库之间的 SQL 查询需要一些关联

php - Laravel 请求验证数据更新

docker - OpenCV 4.2.0 与 python3 和 CUDA : Segfault on cv2. VideoCapture()

docker - docker 链接如何两个容器如何互相知道ip

mysql - 如何在我的 SELECT 中过滤 GROUP_CONCAT

php - 修改从选择字段中选择的字段值