×

docker compose 里environment的优先级是高于env_file的

2024-01-14 08:31:43 Falcon

env_file

env_file 是 Docker Compose 配置文件中的一个指令,该指令指定了一个环境变量文件,该文件中可以包含一个或多个环境变量。当 Docker Compose 启动服务时,这些环境变量会被自动地设置到对应的服务容器中。

这个指令通常用于引入包含很多环境变量的文件,而不是在 docker-compose.yml 中直接书写,这样可以保持 docker-compose.yml 文件的简洁性,同时也有利于敏感信息(如密码、密钥等)的管理和保密。

这个文件是一个简单的键值对列表,例如:

DB_HOST=database
DB_USER=username
DB_PASS=password

这样,你就可以在对应的容器内部通过环境变量(如在 Node.js 中通过 process.env.DB_HOST)来访问这些值。

在 docker-compose.yml 文件中,你可以这样使用 env_file 指令:

version: '3'
services:
  web:
    image: my-web-app
    env_file:
      - web-variables.env

这样,web-variables.env 文件中定义的所有环境变量都会被添加到 web 服务的容器中。

值得注意的是,如果 env_file 中的环境变量和 docker-compose.yml 文件中的 environment 指令冲突,那么 environment 指令的值会优先生效。

如果 env_file 中的环境变量和 docker-compose.yml 文件中的 environment 指令冲突,那么 environment 指令的值会优先生效。

Docker Compose 在处理环境变量时,优先级的顺序是:

  1. docker-compose.yml 文件中的 environment 指令。
  2. docker-compose.yml 文件中的 env_file 指令。
  3. Dockerfile 中的 ENV 指令。
  4. 环境的 shell 变量。

所以当 environmentenv_file 有冲突时,environment 的设置将会覆盖 env_file 的配置。

本文收录于