我正在尝试完全按照这里的答案做
如何在 ENTRYPOINT 数组中使用 Docker 环境变量?
但由于某种原因,它不起作用,这是我的deploy.sh脚本..
#!/bin/bash
#IF ANY command fails, fail the script
set -e
echo "Deploying $@"
Run Code Online (Sandbox Code Playgroud)
这是我的 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}"
Run Code Online (Sandbox Code Playgroud)
这是我的 docker run 命令,我尝试在其中提供服务。(如果也没有提供服务,我宁愿失败)
docker run gcr.io/orderly-gcp/prod-deploy -e SERVICE=blah
Run Code Online (Sandbox Code Playgroud)
然而,当我运行该命令时,我的输出很简单
Deploying default
Run Code Online (Sandbox Code Playgroud)
我不确定为什么我遵循了该示例 SO 帖子,但这仍然不起作用?
向docker传递环境变量有3种方式
使用-e像这样的标志-e ENV_NAME='ENV_VALUE'
具有一个环境变量的示例
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD='secret' -d mysql:tag
Run Code Online (Sandbox Code Playgroud)
具有两个环境变量的示例
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD='secret' -e MYSQL_DATABASE='mySchema' -d mysql:tag
Run Code Online (Sandbox Code Playgroud)
具有两个环境变量和许多选项的示例
docker run --name some-mysql -d -t -i -e MYSQL_ROOT_PASSWORD='secret' -e MYSQL_DATABASE='mySchema' mysql:tag
Run Code Online (Sandbox Code Playgroud)
注意:您应该
mysql:tag在选项后传递图像名称,例如-e MYSQL_ROOT_PASSWORD='secret' -e MYSQL_DATABASE='mySchema'
使用.env文件。基本上,您将向文件添加环境变量,.env然后将此名称传递给docker run命令,例如docker run --env-file ./.env
具有一个环境变量的示例
创建.env文件
MYSQL_ROOT_PASSWORD=secret
Run Code Online (Sandbox Code Playgroud)
然后在docker命令中使用
docker run --name some-mysql --env-file ./.env -d mysql:tag
Run Code Online (Sandbox Code Playgroud)
具有两个环境变量的示例
创建.env文件
MYSQL_ROOT_PASSWORD=secret
MYSQL_DATABASE=mySchema
Run Code Online (Sandbox Code Playgroud)
然后在docker命令中使用
docker run --name some-mysql --env-file ./.env -d mysql:tag
Run Code Online (Sandbox Code Playgroud)
具有两个环境变量和许多选项的示例
创建.env文件
MYSQL_ROOT_PASSWORD=secret
MYSQL_DATABASE=mySchema
Run Code Online (Sandbox Code Playgroud)
然后在docker命令中使用
docker run --name some-mysql -d -t -i --env-file ./.env mysql:tag
Run Code Online (Sandbox Code Playgroud)
注意:您不应在值中添加单引号或双引号
注意:您应该
mysql:tag在选项后传递图像名称,例如--env-file ./.env
使用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'
Run Code Online (Sandbox Code Playgroud)
然后尝试使用printenv MY_NAME结果将其打印ahmed。
让我们按照示例进行操作。
具有一个环境变量的示例
export MYSQL_ROOT_PASSWORD='secret'
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD -d mysql:tag
Run Code Online (Sandbox Code Playgroud)
具有两个环境变量的示例
export MYSQL_ROOT_PASSWORD='secret'
export MYSQL_DATABASE='mySchema'
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD -e MYSQL_DATABASE -d mysql:tag
Run Code Online (Sandbox Code Playgroud)
具有两个环境变量和许多选项的示例
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
Run Code Online (Sandbox Code Playgroud)
mysql:tag注意:您应该在 等选项后传递图像名称-e MYSQL_ROOT_PASSWORD -e MYSQL_DATABASE。
Dockerfile
FROM debian
ENTRYPOINT ["printenv", "ENV_NAME"]
Run Code Online (Sandbox Code Playgroud)
尝试使用它
$ 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6104 次 |
| 最近记录: |