如何在「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 機密。例如:

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 Secret,例如:

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 從機密文件中讀取密碼)

相關內容