gpt4 book ai didi

wordpress - 为什么我需要在 docker-compose.yml 中显式声明 env 文件?

转载 作者:行者123 更新时间:2023-12-02 21:05:49 25 4
gpt4 key购买 nike

我扩展了 Wordpress 图像以添加 XDebug、PHPUnit、composer 和 phpcs。

我的项目根目录如下所示:

docker-wordpress    Dockerfiledocker-compose.yml.env

docker-compose.yml:

version: '3.7'

services:
db:
image: mysql:5.7
volumes:
- ./docker-mysql/db_data:/var/lib/mysql
restart: always
ports:
- "3306:3306"
env_file: .env

wordpress:
depends_on:
- db
image: progonkpa/mywordpress
ports:
- "80:80"
- "443:443"
restart: always
volumes:
- ./src:/var/www/html
env_file: .env

volumes:
db_data:

此配置有效,但只是因为我明确添加了 env_file 声明,而我认为如果我遵循正确的约定,Docker 会自动获取文件:根目录中的 .env 文件。

我实际上想删除 docker-compose.yml 中的 env_file 声明,但后来我遇到了一些问题。

MySQL 容器日志:
database is uninitialized and password option is not specified
You need to specify one of MYSQL_ROOT_PASSWORD

我似乎在初始化容器时第一次运行时,我与 mysql 相关的变量没有通过。 .env 文件包含常用的 Wordpress 和 MySQL 变量:
MYSQL_DATABASE=wordpress
MYSQL_USER=wordpress
MYSQL_PASSWORD=wordpress
MYSQL_ROOT_PASSWORD=wordpress
WORDPRESS_DB_HOST=db:3306
WORDPRESS_DB_USER=wordpress
WORDPRESS_DB_PASSWORD=wordpress

那么为什么我的变量没有到达我的容器呢?

最佳答案

这里有两个地方可以使用变量:在 compose 文件中,在 docker-compose 创建的容器中。 .
.env文件将被 docker-compose 使用调整环境docker-compose命令自己。这对于 yaml 文件中需要扩展的变量或 compose 本身使用的变量很有用。有关后者的更多信息,请参阅 the compose CLI variables docs .

定义 env_file yaml 内部将从文件中获取环境变量并将它们注入(inject)容器中。这使它对您的应用程序可见,但不能用于您想要的 yaml 中的变量 docker-compose扩展,因为变量扩展发生在 env_file 之前内容被解析。

关于wordpress - 为什么我需要在 docker-compose.yml 中显式声明 env 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58047984/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com