我需要编写在 docker swarm 集群上创建服务的脚本。示例脚本与此类似:
docker service create \
--name postgres \
--mode global \
--constraint "node.labels.postgres==master" \
--network my-network \
--env POSTGRES_USER="postgres" \
--env POSTGRES_PASSWORD="****" \
postgres:10
POSTGRES_USER 和 POSTGRES_PASSWORD 环境变量应该来自 docker secrets。例如:
echo "example_password" | docker secret create postgres-password -
我知道可以从正在运行的容器内以文件的形式访问该机密。但在上面的示例中,它必须作为环境变量传递给“服务创建”命令。它由容器的入口点使用,因此必须在创建容器之前呈现。那么如何将秘密传递给“docker service create”命令的 --env 开关?
如此处所述https://github.com/docker-library/docs/blob/master/postgres/README.md如果您添加 _FILE 后缀,则可以在 postgres 服务中使用 swarm secret,例如:
如果您询问任何服务的通用解决方案,则不可能不创建容器或服务,它会以明文形式公开密码(例如 Nginx,它从机密文件中读取密码)