为什么我需要处于Swarm模式才能使用Docker secrets?

为什么我需要处于Swarm模式才能使用Docker secrets?,docker,docker-swarm,docker-secrets,Docker,Docker Swarm,Docker Secrets,我正在玩一个单一的集装箱码头工人形象。我想在不使用compose的情况下将我的db密码存储为一个秘密(目前存在这方面的问题和Gradle)。我想即使不作曲我也可以使用秘密,但当我尝试时,我得到了 $ echo "helloSecret" | docker secret create helloS - 来自守护程序的错误响应:此节点不是swarm manager。使用“docker swarm init”或“docker swarm join”将此节点连接到swarm,然后重试 为什么我需要使用

我正在玩一个单一的集装箱码头工人形象。我想在不使用compose的情况下将我的db密码存储为一个秘密(目前存在这方面的问题和Gradle)。我想即使不作曲我也可以使用秘密,但当我尝试时,我得到了

$ echo "helloSecret" | docker secret create helloS -
来自守护程序的错误响应:此节点不是swarm manager。使用“docker swarm init”或“docker swarm join”将此节点连接到swarm,然后重试

为什么我需要使用swarm模式才能使用机密?为什么我不能在没有集群的情况下使用它们?

查看以下答案:由用户选择提供:-

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

您使用的合成文件为:

我切换到docker compose,因为我想使用机密。我是 很高兴我这么做了,它看起来干净多了。每个服务映射到一个 容器。如果你想换成管理蜂群, 你基本上已经做到了

不幸的是,这些秘密没有装入容器的 环境,它们被装载到/run/secrets/


您需要为机密运行swarm模式,因为docker就是这样实现机密的。机密的价值在于,工作人员从不将机密写入磁盘,该机密基于需要知道的基础(其他工作人员在那里安排任务之前不会接收该机密),并且管理人员会在磁盘上加密该机密。管理器上的机密存储使用raft数据库

您可以使用命令
docker swarm init
轻松部署单节点群集。从那里,
docker compose up
将更改为
docker stack deploy-c docker-compose.yml$stack\u name


swarm模式下的Secrets和Config提供了将单个文件卷装载到容器中进行配置的替代方法。因此,如果单个节点上没有swarm模式,则始终可以进行以下定义:

version: '2'
services:
  app:
    image: myapp:latest
    volumes:
    - ./secrets:/run/secrets:ro

或者,您可以通过将这些机密加载到命名卷中,将这些机密从应用程序中稍微分离出来。为此,您可以执行以下操作:

tar -cC ./secrets . | docker run -i -v secrets:/secrets busybox tar -xC /secrets
然后装载该命名卷:

version: '2'
volumes:
  secrets:
    external: true
services:
  app:
    image: myapp:latest
    volumes:
    - secrets:/run/secrets:ro

它们存储在木筏日志中(这是群体特有的)。不过,您不需要使用compose(可以通过cli创建所有内容)。仅仅使用单节点群集并没有真正的缺点。@johnharris85这似乎是违反直觉的,但我对docker来说是个新手。我意识到拥有一个节点群可能不会“伤害”我只是觉得它至少会增加一点开销,我不知道为什么这是一个秘密。不过,我会看一看木筏日志,也许这会给我们一些启示。谢谢但是为什么你需要使用秘密呢?这是因为您需要在生产和开发中使用相同的代码吗?最终是的,我希望这样做,这样我就不必在docker文件中存储EnvVars。您能否展示一个使用秘密的
docker compose
的工作示例?文档甚至OP的错误消息都表明不会在容器中配置机密。例如,以下答案中的步骤基于上述答案:该示例不使用
docker compose
,而是使用swarm模式部署机密(请参阅
docker swarm init
docker stack deploy
命令)。可能混淆之处在于编写文件与
docker compose
命令不同。swarm模式使用相同的yaml编写文件(具有版本3语法)Swarm为您提供了编排、容错、多节点、重叠网络、路由网格和秘密(我想不起来).Swarm将很好地扩展,与k8s的最大区别在于可配置性和可扩展性。Swarm模式是一种适合多种解决方案的单一模式,如果它是您的尺寸,那就非常好了。