Como usar um valor secreto de docker / swarm como uma variável de ambiente em “docker service create”?

1

Eu preciso escrever scripts que criem serviços em clusters de enxame do docker. Um script de exemplo seria semelhante a isto:

docker service create \
    --name postgres \
    --mode global \
    --constraint "node.labels.postgres==master" \
    --network my-network \
    --env POSTGRES_USER="postgres" \
    --env POSTGRES_PASSWORD="****" \
    postgres:10

As variáveis de ambiente POSTGRES_USER e POSTGRES_PASSWORD devem vir de segredos do docker. Por exemplo:

echo "example_password" | docker secret create postgres-password -

Eu entendo que o segredo pode ser acessado como um arquivo de dentro de um contêiner em execução. Mas no exemplo acima, ele deve ser passado para o comando "service create" como uma variável de ambiente. Ele é usado pelo ponto de entrada do contêiner, portanto, deve ser apresentado ANTES que o contêiner seja criado. Então, como posso passar um segredo para a opção --env do comando "docker service create"?

    
por nagylzs 23.02.2018 / 12:21

1 resposta

1

Como afirmado link , você pode usar os segredos de swarm no serviço postgres quando se você adicionar o sufixo _FILE como:

serviço docker create \     --name postgres \     --mode global \     --constraint "node.labels.postgres == master" \     --network minha rede \    --secret "postgres-password" \     --env POSTGRES_USER="postgres" \     --env POSTGRES_PASSWORD_FILE="/ run / secrets / postgres-password" \     postgres: 10

Se você perguntar sobre soluções genéricas para qualquer serviço, isso não será possível sem a criação de contêiner ou serviço, o que expõe senhas em texto não criptografado (digamos Nginx que lê senhas de arquivos que são segredos)

    
por 23.02.2018 / 14:04