docker - 带有-ef标志的Docker exec
解决方案
鉴于docker exec
没有-f
选项,f
这里是-e
( --env
) 的参数,它通常接受对列表- 为'd 进程KEY=VALUE
设置/修改的环境变量。exec
有趣的是,文档既没有描述--env
选项参数的确切格式,也没有解释如果参数不是通常的KEY=VALUE
形式会发生什么。
考虑到这-ef
是一个有效的参数,假设它被视为f
环境变量的名称是合乎逻辑的。此外,由于我们不提供值(=
名称后没有),因此可以合理地假设该变量要么未更改,要么未设置。我们可以凭经验检查这一点。创建带有附加环境变量集的容器:
$ docker run -d -e TESTVAR=testval --name test alpine sleep 1000
查看容器的实际环境:
$ docker exec test env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=27979b7f0ceb
TESTVAR=testval
HOME=/root
然后尝试exec
运行-e TESTVAR
:
$ docker exec -e TESTVAR test env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=27979b7f0ceb
HOME=/root
看起来变量未设置。但是如果TESTVAR
当前在我们的 shell 中设置了呢?
$ export TESTVAR=12345
$ docker exec -e TESTVAR test env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=3fa7190750aa
TESTVAR=12345
HOME=/root
因此,似乎传递不带值的变量名称会将exec
'd 进程的此变量设置为当前为调用进程设置的值(实际上,事实证明,这种行为在docker run的文档中有所描述,并且docker exec
只是行为相同,但未记录)。
回到原来的问题,答案是:将'd进程docker exec -ef
的环境变量设置f
为当前shell中变量的值,如果设置了这个变量,或者为'd进程取消设置,如果该变量当前没有放。exec
f
exec
推荐阅读
- java - 如何设置 MeterRegistry 以在 Micrometer.io 上使用 DataDog
- android - 反应原生不启动地铁捆绑器
- ios - 如何在 ios swift 中为 VoiceOver 设置展开和折叠状态?
- python - 'python -m pip install 之间的区别
'和'点安装 ' - firebase - 如何将数据作为子集合添加到firebase颤振中的所有用户文档?
- json - Laravel - 如何从同一控制器中的其他函数传递变量
- node.js - 有没有办法可以将开放遥测跨度导出到普罗米修斯?
- django - Django 电子邮件:是否已建立与 SMTP 服务器的连接?
- flutter - 如何防止用户在颤动中使用 getX 倒退
- c++ - 如何分块读取ORC文件