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

Как использовать секретное значение 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 должны быть взяты из docker secrets. Например:

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

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

решение1

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

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, который считывает пароли из файлов, которые являются секретными).

Связанный контент