Как смонтировать сертификаты из CertBot для использования внутри Docker Container
Официальный certbot
( https://certbot.eff.org/) инструмент для выдачи и продления сертификатов от Let's Encrypt
сохраняет действующий сертификат в ${prefix}/archive/${domain}/certN.pem
, где N
это произвольное число. Пути, которые должны использоваться для доступа к действующим в настоящее время сертификатам и ключам, являются относительными символическими ссылками в ${prefix}/live/${domain}/cert.pem
:
root@skprov2:${prefix}/live/${domain}# 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/${domain}/cert2.pem
0 lrwxrwxrwx 1 root root 40 Jul 24 16:08 chain.pem -> ../../archive/${domain}/chain2.pem
0 lrwxrwxrwx 1 root root 44 Jul 24 16:08 fullchain.pem -> ../../archive/${domain}/fullchain2.pem
0 lrwxrwxrwx 1 root root 42 Jul 24 16:08 privkey.pem -> ../../archive/${domain}/privkey2.pem
4.0K -rw-r--r-- 1 root root 682 Jul 23 09:40 README
Когда только монтаж live
каталог, программы, работающие внутри докер-контейнеров, не смогут загрузить необходимые данные сертификата из-за относительных символических ссылок.
Как можно получить последние (действительные) данные сертификата от certbot
использоваться в контейнере Docker?
1 ответ
Относительные символические ссылки отображаются на 2 слоя (от 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
).