Docker-Swarm

如何在“docker service create”中使用 docker/swarm 秘密值作為環境變數?

  • January 1, 2021

我需要編寫在 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,例如:

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

引用自:https://serverfault.com/questions/898565