Docker 如何限制传递给链接容器的环境变量

Docker 如何限制传递给链接容器的环境变量,docker,Docker,我们已经开始广泛使用docker(我们喜欢它),但发现了一个相当严重的安全问题。链接容器可以完全访问源容器的环境设置 例如,假设您创建了一个mysql容器 docker run --name db -e MYSQL_ROOT_PASSWORD=mysecretpassword -d mysql 现在您创建了一个wordpress容器 docker run --name wp --link db:db \ -e WORDPRESS_DB_USER=wp \ -e WORDPRES

我们已经开始广泛使用docker(我们喜欢它),但发现了一个相当严重的安全问题。链接容器可以完全访问源容器的环境设置

例如,假设您创建了一个mysql容器

docker run --name db -e MYSQL_ROOT_PASSWORD=mysecretpassword -d mysql
现在您创建了一个wordpress容器

docker run --name wp --link db:db \
    -e WORDPRESS_DB_USER=wp \
    -e WORDPRESS_DB_PASSWORD=1234 \
    -d wordpress
如果您现在检查wordpress容器中的环境,您将能够看到mysql根密码

docker exec -i wp sh -c "env|grep ^MYSQL_MYSQL_ENV"

MYSQL_ENV_MYSQL_MAJOR=5.7
MYSQL_ENV_MYSQL_ROOT_PASSWORD=mysecretpassword
MYSQL_ENV_MYSQL_VERSION=5.7.5-m15
这是一个很大的安全漏洞!wordpress容器中的任何随机代码或模块都可以使用mysql根密码进行连接并发出混乱的声音。如果mysql数据库与多个wordpress容器(和joomla容器)共享,那么灾难可能是全球性的

我的问题是,有没有办法限制链接容器之间传递的环境变量

第二个问题——我仔细检查了链接容器的文档


但它并没有描述这种行为。我在想也许这是一个意外的副作用,也许我应该打开一个bug报告

我的问题是,有没有办法限制链接容器之间传递的环境变量


如果这是您的环境中的一个问题,那么最好的选择可能是采用容器链接以外的解决方案来进行服务发现。例如,您可以使用其中的一个不同的<代码> ETCD < /代码>支持的发现机制,或者直接使用<代码> ETCD ,或者类似,或者./p>“也许我应该打开一个bug报告”——这是我的答案。我甚至没有想到要考虑另一个服务发现机制。这是一个很好的建议——谢谢。