我需要編寫在 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 從機密文件中讀取密碼)