Как смонтировать сертификаты из CertBot для использования внутри Docker Container

349
NoMad

Официальный certbot( https://certbot.eff.org ) инструмент выдавать и продлевать сертификаты Let's Encryptсохраняет действующий в настоящее время сертификат $/archive/$/certN.pem, где Nэто произвольное число. Пути, которые должны использоваться для доступа к действующим в настоящее время сертификатам и ключам, являются относительными символическими ссылками в $/live/$/cert.pem:

root@skprov2:$/live/$# ls total 12K 4.0K drwxr-xr-x 2 root root 4.0K Jul 24 16:08 ./ 4.0K drwx------ 9 root root 4.0K Aug 24 10:57 ../ 0 lrwxrwxrwx 1 root root 39 Jul 24 16:08 cert.pem -> ../../archive/$/cert2.pem 0 lrwxrwxrwx 1 root root 40 Jul 24 16:08 chain.pem -> ../../archive/$/chain2.pem 0 lrwxrwxrwx 1 root root 44 Jul 24 16:08 fullchain.pem -> ../../archive/$/fullchain2.pem 0 lrwxrwxrwx 1 root root 42 Jul 24 16:08 privkey.pem -> ../../archive/$/privkey2.pem 4.0K -rw-r--r-- 1 root root 682 Jul 23 09:40 README 

Когда монтируется только liveкаталог, программы, работающие внутри докер-контейнеров, не смогут загрузить необходимые данные сертификата из-за относительных символических ссылок.

Как можно использовать самые последние (действительные) данные сертификата certbotв контейнере Docker?

0

1 ответ на вопрос

0
NoMad

Относительные символические ссылки отображаются на два уровня вверх (от domainпапки к liveпапке, от liveпапки к rootпапке), затем входят в archiveпапку и, наконец, в domainподпапку внутри.

Чтобы избежать монтирования всех подкаталогов домена и предоставления доступа ко всем данным сертификата, мы должны использовать 2 монтирования.

Структура каталогов Docker Host

Давайте предположим следующую структуру каталогов, созданную certbot на хосте Docker:

/certbot/ |-live/ | |-domain.com | | |-cert.pem | | |-privkey.pem | |-domain2.com | |-cert.pem | |-privkey.pem | |-archive/ |-domain.com | |-cert.pem | |-privkey.pem |-domain2.com |-cert.pem |-privkey.pem 

Монтирование подкаталогов

В Docker нам нужны только подкаталоги целевого домена, смонтированные внутри контейнера.

docker run \ -v /certbot/live/domain.com:/cert/live/domain.com:ro \ -v /certbot/archive/domain.com:/cert/archive/domain.com:ro \ myimage:tag 

Таким образом, программы внутри контейнера могут успешно разрешать относительные пути к archiveпапке, в то время как их конфигурация указывает на символические ссылки внутри liveпапки ( /cert/live/domain.com/cert.pem).

Похожие вопросы