繁体   English   中英

在Docker命令行上在容器内扩展环境变量

Expand environment variable inside container on Docker command line

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

假设我创建了一个只运行echo命令的Dockerfile

FROM alpine
ENTRYPOINT [ "echo" ]

并且我这样构建它:

docker build -t my_echo .

如果我运行docker run --rm my_echo test ,它将按预期输出test

但是,如何运行命令以显示容器内部的环境变量?

例:

docker run --rm --env MYVAR=foo my_echo ???

如何通过替换???访问容器中的$MYVAR变量以显示foo 该命令的一部分?


注意:这是我的实际用例的简化版本。 我真正的用例是使用Dockerfile构建的WP-CLI Docker映像。 它具有wp-cli命令作为ENTRYPOINT。

我正在尝试基于此图像运行容器以使用环境变量更新WordPress参数。 我没有Docker的命令是wp-cli option update siteurl "http://example.com" ,其中http://example.com将在环境变量中。

这是我尝试运行的命令( wp_cli是我的容器的名称):

docker run --rm --env WEBSITE_URL="http://example.com" wp_cli option update siteurl ???
1 个回复

可能紧随["bash", "-c"]本身的参数本身就是一个要替换信号的shell脚本。 例如,考虑以下脚本,我将其称为argEnvSubst

#!/usr/bin/env bash
args=( "$@" )                           # collect all arguments into a single array
for idx in "${!args[@]}"; do            # iterate over the indices of that array...
  arg=${args[$idx]}                     # ...and collect the associated values.
  if [[ $arg =~ ^@ENV[.](.*)@$ ]]; then # if we have a value that matches a pattern...
    varname=${BASH_REMATCH[1]}          # extract the variable name from that pattern
    args[$idx]=${!varname}              # and replace the value with a lookup result
  fi
done
exec "${args[@]}"                       # run our resulting array as a command.

因此,在调用echo之前, argEnvSubst "echo" "@ENV.foobar@"会将@ENV.foobar@替换为名为foobar的环境的值。


尽管我强烈建议将其作为单独的脚本注入到Dockerfile中,并将该脚本命名为ENTRYPOINT,但是可以内联地执行此操作:

ENTRYPOINT [ "bash", "-c", "args=(\"$@\"); for idx in \"${!args[@]}\"; do arg=${args[$idx]}; if [[ $arg =~ ^@ENV[.](.*)@$ ]]; then varname=${BASH_REMATCH[1]}; args[$idx]=${!varname}; fi; done; \"${args[@]}\"", "_" ]

...这样您就可以调用:

docker run --rm --env WEBSITE_URL="http://example.com" \
       wp_cli option update siteurl '@ENV.WEBSITE_URL@'

注意使用bash -这意味着alpine (只提供破折号)是不够的。

1 环境变量作为命令行参数

是否可以将环境变量作为参数传递给可执行文件? 我试过了,但我在我的应用程序中得到一个字符串"job_$JOB_ID"而不是"job_123" 另一个可以解决我的问题:有没有办法将此配置对话框参数作为文本文件访问? 这样我就可以在文本编辑器而不是 CLion UI 中编辑程序参数。 这些配置必须 ...

2019-08-11 03:47:42 1 1274   clion
3 XCUITests-通过命令行传递环境变量

我试图通过命令行将值传递给XCUITest。 我知道可以通过以下方式对XCTest(非UI)执行此操作: xcodebuild-详细测试-workspace MyWorkspace.xcworkspace -derivedDataPath派生的数据-scheme“ MyScheme” ...

4 如何在PuTTY命令行上设置私钥和环境变量

我想在Windows的隧道命令行中包含一个附加选项,它将获取私钥。 例如,现在的命令是: 服务器本地主机配置为使用私钥身份验证文件。 在那种情况下使用什么选项来使用文件,我看到有-i file.ppk选项,但是如何从Windows目录中包含该文件,例如: D:\\file.ppk 。 ...

5 Windows流星命令行中的环境变量

尝试在Windows上的流星命令行中设置环境变量失败。 例如JASMINE_BROWSER=PhantomJS meteor [options]返回 请问如何在流星命令行中设置环境变量? ...

2015-04-11 12:44:28 2 1472   meteor
6 具有命令行参数的Rake Task环境变量

因此,我在rake任务上得到了一些“未初始化的常量”,并进行了一次谷歌搜索,发现需要加载环境变量。但是,我还使用了命令行参数,不确定是否定位正确或执行了什么操作。 : 没有某个环境变量,我会抱怨Core :: Stuff尚未初始化,但是我试图通过CL传递:user。 (这只是一个示例性 ...

7 Maven命令行参数环境变量

当我运行像mvn clean install的mvn构建时,我注意到在System.getenv()有一个带有密钥MAVEN_CMD_LINE_ARGS的条目,名称是我指定的任何maven阶段(在这种情况下是clean install )。 但是,我找不到任何关于此的文档。 有谁知道MA ...

9 如何从命令行操作环境变量?

假设我有一个RSession使用环境变量开放myVariable <- 'foo' 。 该变量完全封装在当前环境中。 现在,假设我同时打开了一个终端/命令行窗口。 有什么方法可以在命令行中以某种方式访问​​和操作变量myVariable ? 更具体地讲,如何从外部环境对该变量进 ...

2018-08-16 20:26:24 0 42   r
10 参数传递策略 - 环境变量与命令行

我们开发人员编写的大多数应用程序都需要在启动时进行外部参数化。 我们传递文件路径、管道名称、TCP/IP 地址等。到目前为止,我一直在使用命令行将这些传递给正在启动的应用程序。 我必须在main解析命令行并将参数定向到需要它们的地方,这当然是一个很好的设计,但是对于大量参数来说很难维护。 最近我决定 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM