Официальный 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 каталог, программа , работающая внутри докеров контейнеров будут не в состоянии загрузки необходимого certiticate данных, из - за относительные симлинка.

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

1 ответ1

0

Относительные символические ссылки отображаются на 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .