将环境变量传递给docker的三种方式
第一种方式
使用-e 标志,如-e ENV_NAME='ENV_VALUE'
一个环境变量的示例
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD='secret' -d mysql:tag
两个环境变量的示例
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD='secret' -e MYSQL_DATABASE='mySchema' -d mysql:tag
具有两个环境变量和许多选项的示例
docker run --name some-mysql -d -t -i -e MYSQL_ROOT_PASSWORD='secret' -e MYSQL_DATABASE='mySchema' mysql:tag
注意:您应该在 -e MYSQL_ROOT_PASSWORD='secret' -e MYSQL_DATABASE='mySchema' 等选项之后传递图像名称 mysql:tag
第二种方式
使用.env 文件。基本上你会将环境变量添加到.env 文件,然后将此名称传递给docker run 命令,如docker run --env-file ./.env
一个环境变量的示例
创建.env 文件
MYSQL_ROOT_PASSWORD=secret
然后在docker命令中使用
docker run --name some-mysql --env-file ./.env -d mysql:tag
两个环境变量的示例
创建.env 文件
MYSQL_ROOT_PASSWORD=secret
MYSQL_DATABASE=mySchema
然后在docker命令中使用
docker run --name some-mysql --env-file ./.env -d mysql:tag
具有两个环境变量和许多选项的示例
创建.env文件
MYSQL_ROOT_PASSWORD=secret
MYSQL_DATABASE=mySchema
然后在docker命令中使用
docker run --name some-mysql -d -t -i --env-file ./.env mysql:tag
注意:您不应在值中添加单引号或双引号
注意:您应该在 --env-file ./.env 等选项之后传递图像名称 mysql:tag
第三条路
使用linux环境变量所以首先我们需要解释如何添加linux环境变量。它有两种类型(本地,全局)。例如-e ENV_NAME。
要添加本地环境变量,只需使用$ export MY_NAME='ahmed'。然后尝试检索它$ printenv MY_NAME,结果将是ahmed。
注意:当您使用$ export MY_NAME='ahmed' 时,您可以在当前终端的任何命令中使用MY_NAME。因此,如果您尝试在另一个终端中使用它,它将无法正常工作。
要添加环境变量以在当前命令中工作,只需使用$ MY_NAME='ahmed' my_command。例如$ MY_NAME='ahmed' printenv MY_NAME 结果将是ahmed。因此,如果您再次尝试打印MY_NAME,它将无法正常工作。
要添加环境变量以在所有终端中工作,只需打开 ~/.bashrc 然后添加您的环境变量,如
MY_NAME='ahmed'
ENV_NAME='ENV_VALUE'
然后尝试使用printenv MY_NAME 打印它,结果将是ahmed。
让我们按照示例进行操作。
一个环境变量的示例
export MYSQL_ROOT_PASSWORD='secret'
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD -d mysql:tag
两个环境变量的示例
export MYSQL_ROOT_PASSWORD='secret'
export MYSQL_DATABASE='mySchema'
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD -e MYSQL_DATABASE -d mysql:tag
具有两个环境变量和许多选项的示例
export MYSQL_ROOT_PASSWORD='secret'
export MYSQL_DATABASE='mySchema'
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD -e MYSQL_DATABASE -d -t -i mysql:tag
注意:您应该在 -e MYSQL_ROOT_PASSWORD -e MYSQL_DATABASE 等选项之后传递图像名称 mysql:tag。
演示
Dockerfile
FROM debian
ENTRYPOINT ["printenv", "ENV_NAME"]
尝试使用它
$ docker build --tag demo .
$ ENV_NAME='Hello World' docker run -e ENV_NAME demo:latest
$ Hello World
$ docker run -e ENV_NAME='Hello World' demo:latest
$ Hello World