在Docker中隐藏/模糊环境参数

我使用mysql图像作为例子,但问题是通用的。

在Docker中用于启动mysqld的密码在docker ps中不可见,但在Docker检查中可见:

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" ] 

有没有办法隐藏/混淆启动容器时传递的环境参数。 或者,是否可以通过引用文件来传递敏感参数?

你说“或者,是否可以通过引用文件传递敏感参数?”,从文档中提取http://docs.docker.com/reference/commandline/run/ --env-file=[] Read in a file of environment variables

奇怪的是,我只是写了一篇文章。

我build议不要使用环境variables来存储秘密,主要是因为迪奥戈莫妮卡在这里概述的原因; 它们在太多的地方是可见的(链接容器,docker检查,subprocess),并可能以debugging信息和问题报告结束。 我不认为使用环境variables文件将有助于缓解任何这些问题,尽pipe它会阻止将值保存到shell历史logging。

相反,你可以传递你的秘密,例如:

 $ docker run -v $(pwd)/my-secret-file:/secret-file .... 

如果你真的想使用一个环境variables,你可以把它作为一个脚本来源,至less隐藏它的检查和链接容器(如CMD source /secret-file && /run-my-app )。

使用卷的主要缺点是您可能会意外地将文件检入版本控制。

一个更好,但更复杂的解决scheme是从一个关键值存储,如etcd( crypt ), keywhiz或vault 。