Есть ли способ заставить Docker-контейнер распознавать обновленные сертификаты и перезапускать его процесс? - PullRequest
0 голосов
/ 07 июня 2018

Я все еще нахожусь в процессе обучения использованию Docker, но я думаю, что мне удалось создать приличный образ, который запускает certbot и получает ssl-сертификаты моих различных веб-сайтов.Этот образ выполняет первоначальный запрос certbot, если он не видит никаких сертификатов, а затем запускает crond с помощью одного задания, запускающего команду обновления.

Сами сертификаты помещаются в именованный том, сопоставленный с / etc /letsencrypt.

Я намеревался присоединить этот том к другим контейнерам, которым необходим доступ к сертификатам.Однако мне приходит в голову, что при обновлении новые файлы сертификатов будут отображаться доступными для этих контейнеров, но сами приложения не будут перезагружаться или замечать их.

Есть ли разумный способ сделать это?Сначала я подумал, что это может быть способ управления сертификатами без необходимости повсеместно использовать сценарии ssh / scp, но я не могу придумать, как заставить веб-приложения распознавать, что сертификаты были обновлены, и соглашаться на это.,Есть ли уловка или стратегия, которая может сделать эту работу, или это просто тупик?

1 Ответ

0 голосов
/ 12 июля 2018

Docker-контейнер может управлять другими Docker-контейнерами ... он может запускать / перезапускать / останавливать контейнеры и другие команды так же, как в командной строке.

Необходимо монтировать /var/run/docker.sock в контейнердля того, чтобы это было возможно, и есть проблемы безопасности для этого.

Затем задание (cron), которое обновляет сертификаты, можно изменить, чтобы перезапустить любые контейнеры, использующие общий том сертификатов, с чем-то вроде:

--renew-hook "/usr/bin/curl --unix-socket /var/run/docker.sock -X POST http:/v1.24/containers/gitea/restart"

Имейте в виду, что сам Dockerесть другие рекомендации о том, как делать сертификаты, используя функциональность docker secret (доступно только в режиме роя).

...