Как смонтировать сертификаты из 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).

Другие вопросы по тегам