我正在玩一个单一的集装箱码头工人形象。我想在不使用compose的情况下将我的数据库密码存储为一个秘密(目前有该问题和Gradle的问题)。我以为即使不作文,我仍然可以使用秘密,但是当我尝试时,我会得到...
$ echo "helloSecret" | docker secret create helloS -
守护程序的错误响应:该节点不是群集管理器。使用“ docker swarm init”或“ docker swarm join”将此节点连接到swarm并重试。
为什么仅为了使用秘密而需要使用群体模式?为什么不能在没有群集的情况下使用它们?
答案 0 :(得分:4)
您需要为密码运行群模式,因为这就是Docker实施密码的方式。机密的价值在于,工作人员永远不会将机密写入磁盘,该机密基于需要知道的信息(其他工作人员只有在任务计划到那里之后才会收到机密),而管理人员则在磁盘上对该机密进行加密。管理员上的秘密存储使用筏数据库。
您可以使用命令docker swarm init
轻松部署单节点群集集群。从那里,docker-compose up
更改为docker stack deploy -c docker-compose.yml $stack_name
。
群集模式下的秘密和配置为将单个文件卷安装到容器中进行配置提供了替代方法。因此,在单个节点上没有群集模式的情况下,您始终可以进行以下定义:
version: '2'
services:
app:
image: myapp:latest
volumes:
- ./secrets:/run/secrets:ro
或者您可以通过将这些秘密加载到命名卷中来将这些秘密与应用程序稍微分开。为此,您可以执行以下操作:
tar -cC ./secrets . | docker run -v secrets:/secrets busybox tar -xC /secrets
然后挂载该命名卷:
version: '2'
volumes:
secrets:
external: true
services:
app:
image: myapp:latest
volumes:
- secrets:/run/secrets:ro
答案 1 :(得分:3)
查看以下答案:https://serverfault.com/a/936262,由用户sel-en-ium提供:-
如果您使用撰写文件,则可以使用机密。(无需运行 一群)。
您使用带有docker-compose的撰写文件:there is documentation for "secrets" in a docker-compose.yml file。
我切换到docker-compose,因为我想使用秘密。我是 我做的很开心,似乎干净得多。每个服务都映射到一个 容器。而且,如果您想改成运行群, 您基本上已经在那里。
不幸的是,机密未加载到容器的机密中 环境中,它们被安装到/ run / secrets /