获取Docker容器的所有环境变量,包括安全变量

cnh2zyt3  于 2023-02-18  发布在  Docker
关注(0)|答案(1)|浏览(200)

有没有一种方法可以得到Docker映像接受的所有环境变量?包括身份验证和所有可能的环境变量,以充分利用该映像?
例如,我运行了一个redis:7.0.8容器,我想使用这个映像提供的所有可能的特性。首先,我使用了docker inspect,看到了以下内容:

"Env": [
            "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
            "GOSU_VERSION=1.16",
            "REDIS_VERSION=7.0.8",
            "REDIS_DOWNLOAD_URL=http://download.redis.io/releases/redis-7.0.8.tar.gz",
            "REDIS_DOWNLOAD_SHA=06a339e491306783dcf55b97f15a5dbcbdc01ccbde6dc23027c475cab735e914"
        ],

我也尝试了docker exec -it my-container env,它显示了同样的结果。我知道还有更多的变量,例如,它不包括以下内容:

REDIS_PASSWORD
REDIS_ACLS
REDIS_TLS_CERT_FILE
vsikbqxv

vsikbqxv1#

没有文件,这几乎是不可能的。
我们先重复@jonrsharpe的评论:
他们完全接受任何环境变量,但不会对所有变量都做出响应。
例如,请看下面的Python代码:

import os

def get_environ(d, name):
  d.get(name, 'absent')

foo = os.environ.get('FOO', 'default_foo')
star_foo = get_environ(os.environ, foo)
print(star_foo)

这个片段查找一个环境变量$FOO。如果你知道主进程是Python的,并且识别os.environ,你可能会发现这一点。但是,它随后将该值和标准环境传递给一个helper函数,helper函数通过名称查找该环境变量。你需要详细的静态分析来理解这实际上也是一个环境变量查找。

$ ./test.py
absent
$ default_foo=bar ./test.py
bar
$ FOO=BAR BAR=quux ./test.py
quux
$ I=3 ./test.py
absent

(我使用的相当一部分代码相当随意地访问环境变量;这不仅仅是“找到主函数”,而是“找到每个库中每个文件的每个ENV引用”。有些框架(如Sping Boot )允许通过环境变量设置数百个配置选项,即使可以获得所有可能的设置,输出也会令人望而却步。)
“有哪些环境变量”并不是标准的容器元数据,你必须确定主容器进程运行的语言,并对它进行这类分析,包括编译语言。这似乎不是一个可以解决的问题。

相关问题