gpt4 book ai didi

Docker 环境变量没有通过运行命令到 shell 脚本

转载 作者:行者123 更新时间:2023-12-02 18:08:27 26 4
gpt4 key购买 nike

我正在尝试完全按照此处的答案进行操作
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

NOTE: You should pass image name mysql:tag after options like -e MYSQL_ROOT_PASSWORD='secret' -e MYSQL_DATABASE='mySchema'



第二种方式
使用 .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

NOTE: You shouldn't add single quote or double quote to the value


NOTE: You should pass image name mysql:tag after options like --env-file ./.env



第三种方式
使用linux环境变量所以首先我们需要解释一下如何添加linux环境变量。它有两种类型(本地的,全局的)。例如 -e ENV_NAME .
  • 本地(每个终端)

  • 添加本地环境变量只需使用 $ export MY_NAME='ahmed' .然后尝试检索它 $ printenv MY_NAME结果将是 ahmed .

    NOTE: When you use $ export MY_NAME='ahmed' you can use MY_NAME in any command in current terminal. so if you try to use it in anther terminal it will not work.


  • 本地(每个命令)

  • 要添加环境变量以在当前命令中工作,只需使用 $ 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

    NOTE: You should pass image name mysql:tag after options like -e MYSQL_ROOT_PASSWORD -e MYSQL_DATABASE.



    演示
    文件
    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 环境变量没有通过运行命令到 shell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63063183/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com