如何在没有集群的情况下使用Docker机密?


29

目前,我们在单个Docker容器上运行一个应用程序,该应用程序需要将各种敏感数据作为环境变量进行传递,

我将它们放在run命令上,这样它们就不会出现在映像中,然后再出现在存储库中,但是我最终得到了一个非常不安全的run命令,

现在,我了解到存在Docker机密,但是,如何在不部署集群的情况下使用它们呢?还是有其他方法可以保护此数据?

最好的祝福,


6
有几种方法可以使用秘密而不群blog.mikesir87.io/2017/05/...
亚历山大Aksarin

Answers:


6

您不能...没有Swarm,它不支持机密。除非“可能是”,否则您仅使用一个节点进行“群集”。

我认为另一种解决方案是使用像这样的第三方保险库软件:

https://www.vaultproject.io/

但是,要使用Vault中容器中的机密信息,您需要阅读文档。

希望这能带您走上正确的道路。


实际上,我只需要在创建容器时注入这些秘密,它们并不需要真正在运行中的容器中保持“秘密”,所以我想主机调用并使用这些秘密将是有意义的。 docker run命令,我想我可以编写带有大量替换和对Vault调用的脚本。
Juan Sebastian

@JuanSebastian,您应该查看该用例的Docker'build-args'。
user23390

@JuanSebastian我可能是错的,但得到当地ENV会给你什么是放入系统集结ARGS内....不知道.....
得到

build-args最终映像中不包含它们,但是只能在映像构建期间访问。合适的解决方案是将机密信息写入主机上的文件(当然具有适当的权限),然后将其批量安装到Docker容器中。然后,您位于容器内的应用程序可以从这些文件中读取机密信息
Brandon

22

是的,如果您使用撰写文件,则可以使用机密。(您不需要运行一群)。

您将组合文件与docker-compose一起使用docker-compose.yml文件中包含有关“秘密”的文档

我改用docker-compose,因为我想使用秘密。我做的很开心,看起来还干净得多。每个服务都映射到一个容器。而且,如果您想改而运行群,则基本上已经存在了。

注意:机密未加载到容器的环境中,而是已安装到/ run / secrets /

这是一个例子:

1)项目结构:

|
|---    docker-compose.yml
|---    super_duper_secret.txt

2)docker-compose.yml内容:

version: "3.6"

services:

  my_service:
    image: centos:7
    entrypoint: "cat /run/secrets/my_secret"
    secrets:
      - my_secret

secrets:
  my_secret:
    file: ./super_duper_secret.txt

3)super_duper_secret.txt内容:

Whatever you want to write for a secret really.

4)从项目的根目录运行此命令,以查看该容器确实有权访问您的秘密(Docker必须正在运行并且已安装docker-compose):

docker-compose up --build my_service

您应该看到您的容器输出了您的秘密。


您能否展示一个docker-compose使用机密的有效示例?文档和对实现的理解表明,不会在容器中配置密码。
BMitch

2
Docker机密仅可用于群集服务,不适用于独立容器。要使用此功能,请考虑调整容器以使其作为服务运行。有状态容器通常可以在不更改容器代码的情况下以1的比例运行。码头工人
Alwin Kesler

@BMitch添加了一个示例。希望对您有帮助!(自从我与docker合作以来已经有一段时间了,我的环境还有很多事情要做……但是我认为这应该可行。如果我错过了什么,请告诉我!)
Lindsay-Needs-Sleep

没有集群docker-compose.yml在单个节点上),就无法在我的服务上复制它;当我启动容器时,该容器/run仅包含,nginx.pid而没有Mounts显示docker inspect $container
giorgiosironi

2
只是以为我会链接到将其添加到简单的docker-compose(没有群集)的PR。github.com/docker/compose/pull/4368它确实位于其中,并且从代码看来,撰写文件的最低版本为3.1,API为1.13.0。代码仍在当前的母版(github.com/dnephin/compose/blob/…)中,因此不会期望使用最高版本。
ssnobody
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.