如何在“docker service create”中使用docker/swarm秘密值作为环境变量?

如何在“docker service create”中使用docker/swarm秘密值作为环境变量?

我需要编写在 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 -

我知道可以从正在运行的容器内部以文件形式访问密钥。但在上面的示例中,必须将其作为环境变量传递给“service create”命令。它由容器的入口点使用,因此必须在创建容器之前提供它。那么我如何将密钥传递给“docker service create”命令的 --env 开关呢?

答案1

正如这里所述https://github.com/docker-library/docs/blob/master/postgres/README.md如果您添加 _FILE 后缀,则可以在 postgres 服务中使用 swarm secrets,例如:

docker service create \
    --name postgres \
    --mode global \
    --constraint "node.labels.postgres==master" \
    --network my-network \
    --secret "postgres-password" \
    --env POSTGRES_USER="postgres" \
    --env POSTGRES_PASSWORD_FILE="/run/secrets/postgres-password" \
    postgres:10 

如果您询问任何服务的通用解决方案,那么如果不创建以明文形式公开密码的容器或服务(例如,Nginx 从机密文件中读取密码),这是不可能的

相关内容