Как использовать секретное значение docker / swarm в качестве переменной среды в «docker service create»?

Мне нужно написать сценарии, которые создают службы в кластерах 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 должны поступать из секретов докеров. Например:

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

Я понимаю, что к секрету можно получить доступ как к файлу внутри работающего контейнера. Но в приведенном выше примере, он должен быть передан команде "service create" как переменная среды. Он используется точкой входа контейнера, поэтому он должен быть представлен ДО того, как контейнер будет создан. Итак, как я могу передать секрет переключателю --env команды «docker service create»?

1
задан 23 February 2018 в 13:21
1 ответ

Как указано здесь https://github.com/docker-library/docs/blob/master/postgres/README. md вы можете использовать секреты роя в службе postgres, если добавите суффикс _FILE, например:

docker service create \ --name postgres \ --mode global \ --constraint "node.labels.postgres == master" \ --network моя-сеть \ --secret "пароль-постгрес" \ --env POSTGRES_USER = "postgres" \ --env POSTGRES_PASSWORD_FILE = "/ run / secrets / postgres-password" \ postgres: 10

Если вы спросите об общем решении для какой-либо службы, это невозможно без создания контейнера или службы, которая предоставляет пароли в виде открытого текста (скажем, Nginx, который считывает пароли из секретных файлов)

1
ответ дан 3 December 2019 в 23:19