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

时间:2015-03-10 12:33:54

标签: 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 WORDPRESS_DB_PASSWORD=1234 \
    -d wordpress

如果您现在检查wordpress容器中的环境,您将能够看到mysql root密码。

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 root密码来连接和reek havoc。如果mysql数据库与多个wordpress容器(和joomla容器)共享,那么破坏可能是全局的。

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

第二个问题 - 我仔细检查了关于连接容器的文档https://docs.docker.com/userguide/dockerlinks/#environment-variables

但它没有描述这种行为。我想也许这是一个意想不到的副作用,也许我应该打开一个错误报告?

1 个答案:

答案 0 :(得分:0)

  

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

如果您的环境中存在这种问题,最好的办法是采用容器链接以外的解决方案进行服务发现。例如,您可以使用其中一种etcd支持的发现机制 - 直接使用etcd,或consulregistrator或{ {3}}

相关问题