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:
:
它们有不同的范围/优先级。
为 MySQL 的利益传递环境变量:
https://hub.docker.com/_/mysqlMySQL 容器期望这些环境变量存在并具有值。
同样,Laravel 容器需要能够与 MySQL 容器通信,因此它需要匹配的值,这就是重叠的原因。
bash 命令printenv
可能有助于加强这一点,因为您可以看到哪些环境变量暴露给哪些容器(docker run msql_container_name bash -c 'printenv'
与docker run laravel_container_name bash -c 'printenv'
)。
你提到你不介意被发送到参考,所以我主要是这样做的 - 但如果仍然没有意义,我很乐意在这里或在 cmets 中详细说明/我不是解决主要问题。
【讨论】:
以上是关于Docker Compose mysql 环境变量与 Application .env 数据库变量。很困惑的主要内容,如果未能解决你的问题,请参考以下文章
Docker-compose搭建mysql开启binlog日志
Docker-compose搭建mysql开启binlog日志
Docker-compose搭建mysql开启binlog日志