gpt4 book ai didi

docker - 将 “aaa.bbb”变量传递给Docker容器进程

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

更新:最初认为该问题与Apache Commons Config行为有关的问题。我已经更新了问题和标题,以缩小问题的重点。

我正在使用以下Apache Commons配置设置。此设置允许系统属性和/或环境变量覆盖配置文件属性。
我有许多配置文件属性,例如“dspace.url”。

在Docker中测试此应用程序时,通过将环境变量传递给容器来覆盖这些值将非常方便。

请注意,很难从命令行设置环境变量名称中的句点。以下命令失败。

export dspace.url=/some/path

但是,可以使用docker run设置该变量。
docker run -e dspace.url=/some/path ...

如果我连接到Docker实例,则会看到环境变量存在。
docker exec myapp /bin/bash

从该shell中,以下命令显示已设置变量。
env |grep "dspace.url"

这是我遇到的问题。当我尝试在较大的应用程序中覆盖此值时,配置将加载大多数环境变量,但不会加载名称中包含句点的环境变量。

我试图通过编写以下程序来解决问题。当我将该程序作为独立应用程序运行时,我可以访问环境变量,例如“dspace.url”。最值得注意的是,System.getenv()返回这些值。
public static void main(String[] args) {
//builder.setFile(new File("config.xml"));
try {
DefaultConfigurationBuilder builder = new DefaultConfigurationBuilder("config-definition.xml");
Configuration config = builder.getConfiguration(true);
for(Iterator<String> keys = config.getKeys(); keys.hasNext(); ) {
System.out.println("TBTB1 "+keys.next());
}

System.out.println("");

for(Iterator<String> keys=new EnvironmentConfiguration().getKeys(); keys.hasNext();) {
System.out.println("TBTB2 "+keys.next());
}

System.out.println("");

for(String s: System.getenv().keySet()) {
System.out.println("TBTB3"+s);
}

System.out.println(config.getString("dspace.foo"));
System.out.println(config.getString("dspace.name"));
} catch (ConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

如果运行在较大的应用程序中编译的同一代码,则看不到包含句点的环境变量。

您还可以考虑其他差异吗?

最佳答案

OS / Docker镜像的默认 shell 确定是否可以将这些变量导出到子进程中。

将变量传递到当前 shell

通过docker run传递环境变量时,可以将包含句点的环境变量传递给当前shell。

ubuntu

winpty docker run --rm -it -e dspace.foo=ZZZZZ ubuntu env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=0f34eac98005
TERM=xterm
dspace.foo=ZZZZZ
HOME=/root

Alpine 的
docker run --rm -it -e dspace.foo=ZZZZZ alpine env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=2887c4ed82ce
TERM=xterm
dspace.foo=ZZZZZ
HOME=/root

从子流程访问变量

ubuntu-注意变量 不存在

Docker文件
FROM ubuntu
CMD echo `env`

输出量
docker run --rm -it -e dspace.foo=ZZZZZ myshell
HOSTNAME=143368c4bdde HOME=/root TERM=xterm PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin PWD=/

Alpine -注意变量 存在

Docker文件
FROM alpine
CMD echo `env`

输出量
docker run --rm -it -e dspace.foo=ZZZZZ myshell
HOSTNAME=323a8540cefa SHLVL=1 HOME=/root TERM=xterm dspace.foo=ZZZZZ PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin PWD=/

关于docker - 将 “aaa.bbb”变量传递给Docker容器进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54545571/

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