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 -
我知道可以從正在執行的容器內以文件的形式訪問該機密。但在上面的範例中,它必須作為環境變數傳遞給“服務創建”命令。它由容器的入口點使用,因此必須在創建容器之前呈現。那麼如何將秘密傳遞給“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,它從機密文件中讀取密碼)