我正在尝试完全按照这里的答案做
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/

    10-16 09:53