我使用mysql图像作为示例,但问题是通用的.
用于在docker中启动mysqld的密码在docker ps中不可见,但它在docker inspect中可见:
sudo docker run --name mysql-5.7.7 -e MYSQL_ROOT_PASSWORD=12345 -d mysql:5.7.7
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b98afde2fab7 mysql:5.7.7 "/entrypoint.sh mysq 6 seconds ago Up 5 seconds 3306/tcp mysql-5.7.7
sudo docker inspect b98afde2fab75ca433c46ba504759c4826fa7ffcbe09c44307c0538007499e2a
"Env": [
"MYSQL_ROOT_PASSWORD=12345",
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"MYSQL_MAJOR=5.7",
"MYSQL_VERSION=5.7.7-rc"
]
Run Code Online (Sandbox Code Playgroud)
有没有办法隐藏/混淆启动容器时传递的环境参数.或者,是否可以通过引用文件传递敏感参数?
奇怪的是,我只是写了一篇关于此的文章.
我建议不要使用环境变量存储机密,主要是因为迪奥戈莫妮卡在这里概述的原因; 它们在太多地方可见(链接容器,docker检查,子进程),并且可能最终出现在调试信息和问题报告中.我不认为使用环境变量文件将有助于缓解任何这些问题,尽管它会阻止值保存到shell历史记录中.
相反,你可以在一个卷中传递你的秘密,例如:
$ docker run -v $(pwd)/my-secret-file:/secret-file ....
Run Code Online (Sandbox Code Playgroud)
如果您真的想要使用环境变量,可以将其作为要获取的脚本传递,这至少会将其从检查和链接容器中隐藏(例如CMD source /secret-file && /run-my-app).
使用卷的主要缺点是您可能会意外地将文件检入版本控制.
更好但更复杂的解决方案是从密钥值存储(例如etcd(带crypt),keywhiz或Vault)获取它.
您说“或者,是否可以通过引用文件来传递敏感参数?”,摘自文档http://docs.docker.com/reference/commandline/run/ --env-file=[] Read in a file of environment variables。
| 归档时间: |
|
| 查看次数: |
2029 次 |
| 最近记录: |