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

eqoofvh9  于 10个月前  发布在  WordPress
关注(0)|答案(4)|浏览(166)

我扩展了Wordpress图像,添加了Xcovery,PHPUnit,composer和phpcs。
我的项目根看起来像这样:

docker-wordpress
    Dockerfile
docker-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


那么为什么我的变量不能到达容器呢?

bqjvbblv

bqjvbblv1#

这里有两个地方可以使用变量:在compose文件本身内部,以及在docker-compose创建的容器内部。
docker-compose将使用.env文件来调整docker-compose命令本身的环境。这对于yaml文件中需要扩展的变量或compose本身使用的变量很有用。有关后者的更多信息,请参阅the compose CLI variables docs
在yaml中定义env_file将从文件中获取环境变量并将其注入容器中。这使得它对应用程序可见,但不能用于您希望docker-compose扩展的yaml中的变量,因为变量扩展发生在env_file内容解析之前。

fzwojiic

fzwojiic2#

Docker-compose需要显式定义所有内容,将其视为docker run parameter,它只在docker-compose文件中定义的每个容器上应用这些配置或参数。
因此,如果已经在Dockerfile中声明了ENV,则应避免覆盖ENV,因此您需要为自己显式定义这些配置。
当我们构建docker时,我们在docker-image中设置了一些默认配置,但是docker run commanddocker-compose提供了覆盖这些配置的功能,以在镜像作为容器启动时生效。
服务定义包含应用于为该服务启动的每个容器的配置,就像将命令行参数传递给docker container create一样。同样,网络和卷定义类似于docker network create和docker volume create。
compose-file

env_file

从文件中添加环境变量。可以是单个值或列表。
如果您指定了一个使用docker-compose -f FILE编写的文件,则env_file中的路径是相对于该文件所在的目录的。
在环境部分中声明的环境变量覆盖这些值-即使这些值为空或未定义,也是如此。

env_file: .env

字符串

kkbh8khc

kkbh8khc3#

您可以使用docker compose config打印我们解析的应用程序配置(包括environment部分),以查看变量扩展,变量插值和体内实验。
通过使用它,你可以自己回答什么有效,什么无效

1wnzp6jl

1wnzp6jl4#

安全性:将敏感信息(如API密钥或数据库密码)存储在单独的文件中提供了额外的安全层。env_file可以从版本控制系统(如Git)中排除,以防止敏感信息的意外暴露。

相关问题