wordpress - 为什么我需要在 docker-compose.yml 中显式声明 env_file?
问题描述
我扩展了 Wordpress 图像以添加 XDebug、PHPUnit、composer 和 phpcs。
我的项目根目录如下所示:
码头工人-wordpress Dockerfile 码头工人-compose.yml .env
码头工人-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 本身使用的变量很有用。有关后者的更多信息,请参阅撰写 CLI 变量文档。
在 yaml 内部定义一个env_file
将从文件中获取环境变量并将它们注入到容器中。这使它对您的应用程序可见,但不能用于您想要docker-compose
扩展的 yaml 中的变量,因为该变量扩展发生在env_file
解析内容之前。
推荐阅读
- react-native - 如何在 react-native 中围绕圆圈制作渐变边框?我正在使用 LinearGradient 但它填充了圆圈
- php - 我需要帮助编写一个 sql 查询来连接多个字段
- r - 闪亮模块中的 hideTab
- java - java intellij GUI 表单
- splash-screen - 用户获取 - 谷歌广告结果与实际用户获取不匹配
- android - 自定义AlertDialog如何访问android.R.id.custom
- mysql - 使用 SYSTEM 时如何使用 MySQL Docker 修复日志中的时间戳,忽略夏令时?
- javascript - 使用 JS 计算相关连续概率 n 次
- http - Golang HTTP Timeout 测试,没有按预期超时
- html - 在网格中对齐图像