如何将环境变量传递给 Docker 容器?


要将环境变量传递给容器,我们首先必须设置它。
假设我们要为数据库用户设置变量,并且我们计划将该变量用于不同的容器。我们可以设置一个名为 DB_USER 的变量,它适用于使用任何类型数据库的任何容器。假设 DB_USER 的值为 TechRepublic。要设置该变量,我们将发出以下命令:
export DB_USER=TechRepublic
要验证变量是否已设置,请发出以下命令:
echo $DB_USER
您应该会在终端中看到 TechRepublic。就是这样,您已经设置了变量。让我们更进一步(为了示例),并将密码设置为环境变量。您不会在生产中执行此操作,但这是说明如何执行此操作的好方法。
 
如何将变量传递给容器
现在您了解了环境变量的工作原理,您可以了解如何轻松地将它们传递给您的容器。首先,我将演示如何从 docker 命令行执行此操作,然后使用 .env 文件。
与在 Linux 中使用环境变量不同,您不能在主机上设置它们,然后以与在主机系统中相同的方式将这些设置的变量传递给容器。换句话说,例如:
docker run --name postgresql -e $DB_PWORD -e $DB_USER -d postgres

如果您尝试这样部署容器,它将运行但立即退出。为什么?因为与 Linux 系统不同,您几乎可以根据自己的喜好定义环境变量,容器映像需要某些变量。例如,PostgreSQL 数据库不能使用 DB_PWORD 或 DB_USER,因为它需要 POSTGRES_PASSWORD 和 POSTGRES_USER。为此,您可以使用以下命令在 Linux 主机上设置这些环境变量:

export POSTGRES_PASSWORD=t3chr3public
export POSTGRES_USER=TechRepublic

好的,现在我们可以运行相同的命令:
docker run --name postgresql -e POSTGRES_PASSWORD -e POSTGRES_USER -d postgres

该命令成功运行,容器将保持运行。
 
如何使用 .env 文件传递​​变量
如上所述传递环境变量的问题之一是它们存在于内存中(直到您使用unset命令取消设置它们)。为了避免这种情况,我们使用环境变量文件。
让我们坚持使用我们上面使用的相同变量。使用以下命令创建一个新的 .env 文件:
nano .env
加入以下内容:

POSTGRES_PASSWORD=t3chr3public
POSTGRES_USER=TechRepublic

现在可以运行:
docker run --name postgresql --env-file .env -d postgres