docker-compose 使用 env 环境变量文件

10 min read

Docker Compose支持使用环境变量文件(.env文件)来设置Compose文件中使用的环境变量。

在Compose文件中,可以使用${VARIABLE}的语法来引用环境变量。如果在Compose文件中引用了一个未设置的环境变量,Compose将会把该变量的值设置为一个空字符串。

在使用.env文件之前,需要先确保Docker Compose已经安装在你的系统上。然后按照以下步骤来使用.env文件:

  1. 在项目的根目录下创建一个名为.env的文件。

  2. .env文件中添加需要设置的环境变量,例如:

    DB_USER=myuser
    DB_PASSWORD=mypassword
    
  3. 在Compose文件中使用${VARIABLE}的语法来引用环境变量,例如:

    services:
      db:
        image: postgres
        environment:
          POSTGRES_USER: ${DB_USER}
          POSTGRES_PASSWORD: ${DB_PASSWORD}
    
  4. 启动Compose容器时,使用docker-compose up命令并加上--env-file选项来指定.env文件的路径,例如:

    docker-compose up --env-file .env
    

    这将会把.env文件中定义的环境变量加载到Compose容器中。

注意事项:

  1. .env文件中的环境变量会被覆盖已有的环境变量。
  2. 通过设置--env-file选项来指定.env文件时,只能指定一个文件,不能同时指定多个文件。
  3. 在Compose文件中,环境变量的优先级高于.env文件中定义的变量。例如,如果Compose文件中定义了一个环境变量DB_USER,则它的值将会覆盖.env文件中定义的同名变量。

.env文件中,所有的变量都是以字符串形式进行存储和读取的,因此在使用这些变量时,需要将其转换为相应的数据类型,如整数、浮点数或布尔值。

.env文件中,如果要定义一个整数类型的变量,可以将其作为字符串写入,然后在应用程序中使用int()函数或类似函数进行转换。例如:

DB_PORT="5432"

可以在应用程序中这样使用:

import os

db_port = int(os.getenv("DB_PORT"))

这将会把DB_PORT变量的字符串值转换为整数类型。

类似地,如果要定义一个布尔类型的变量,可以将其作为字符串写入,然后在应用程序中使用str()函数或类似函数进行转换。例如:

DEBUG="true"

可以在应用程序中这样使用:

import os
debug = bool(os.getenv("DEBUG"))

这将会把DEBUG变量的字符串值转换为布尔类型