我正在尝试完全按照这里的答案做
How do I use Docker environment variable in ENTRYPOINT array?
但是由于某种原因,它无法正常工作,这是我的deploy.sh脚本。
#!/bin/bash
#IF ANY command fails, fail the script
set -e
echo "Deploying $@"
这是我的Docker文件FROM gcr.io/google.com/cloudsdktool/cloud-sdk:alpine
ENV SERVICE="default"
RUN mkdir -p ./monobuild
COPY . ./monobuild/
WORKDIR "/monobuild"
ENTRYPOINT ./deploy.sh "${SERVICE}"
这是我的docker run命令,我尝试在其中输入SERVICE。 (如果也没有提供SERVICE,我宁愿失败)docker run gcr.io/orderly-gcp/prod-deploy -e SERVICE=blah
但是,当我运行该命令时,我的输出很简单Deploying default
我不确定为什么要遵循该示例SO帖子,但仍然无法正常工作? 最佳答案
将环境变量传递给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
第二种方式
使用
.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
第三路
使用linux环境变量,因此首先我们需要解释如何添加linux环境变量。它有两种类型(本地,全局)。例如
-e ENV_NAME
。要添加局部环境变量,只需使用
$ export MY_NAME='ahmed'
即可。然后尝试检索$ printenv MY_NAME
,结果将是ahmed
。要添加环境变量以在当前命令中工作,只需使用
$ 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
演示版
Docker文件
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
关于docker - Docker环境变量无法通过运行命令运行到Shell脚本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/63063183/