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

Posted

技术标签:

【中文标题】Docker Compose mysql 环境变量与 Application .env 数据库变量。很困惑【英文标题】:Docker Compose mysql environment variables vs Application .env database variables. Majorly confused 【发布时间】:2021-03-24 18:09:10 【问题描述】:

我已经观看了大约 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 工作台连接到它时,我看到一个名为“宅基地”的模式。现在,如果我不想将该 Schema 称为宅基地,或者如果我想添加另一个 Schema,我该怎么办?它不让我??(权限被拒绝)。

我现在花了 3 天时间尝试创建一个空的 laravel 应用程序,该应用程序连接到一个单独的容器中的数据库,该容器使用 mysql,我可以通过 SQL 工作台连接到该容器以查看实际的数据库。我希望能够创建我想在 SQL 工作台中使用的架构名称,然后能够将该架构设置为我的 laravel .env 文件中的数据库名称。

请帮忙!你不必为我解决这个问题,但你能给我指出一些解释这些东西的有用材料吗!对于 docker-compose 特别是 mysql。如果可能,不要在终端中使用 std docker 命令。

【问题讨论】:

你可以像这样在撰写文件MYSQL_DATABASE: '$.env_vairable_name'中使用你只需要放入.env 【参考方案1】:

.env 文件与 docker-compose.yml environment::

https://docs.docker.com/compose/env-file https://docs.docker.com/compose/environment-variables

它们有不同的范围/优先级。

为 MySQL 的利益传递环境变量:

https://hub.docker.com/_/mysql

MySQL 容器期望这些环境变量存在并具有值。

同样,Laravel 容器需要能够与 MySQL 容器通信,因此它需要匹配的值,这就是重叠的原因。

bash 命令printenv 可能有助于加强这一点,因为您可以看到哪些环境变量暴露给哪些容器(docker run msql_container_name bash -c 'printenv'docker run laravel_container_name bash -c 'printenv')。

https://github.com/reflexions/docker-laravel(举例)

你提到你不介意被发送到参考,所以我主要是这样做的 - 但如果仍然没有意义,我很乐意在这里或在 cmets 中详细说明/我不是解决主要问题。

【讨论】:

以上是关于Docker Compose mysql 环境变量与 Application .env 数据库变量。很困惑的主要内容,如果未能解决你的问题,请参考以下文章

如何从docker compose文件中访问env变量

Docker-compose搭建mysql开启binlog日志

Docker-compose搭建mysql开启binlog日志

Docker-compose搭建mysql开启binlog日志

Docker-compose搭建mysql开启binlog日志

docker-compose - 如何转义环境变量