web-dev-qa-db-ja.com

DockerContainer内で使用するためにCertBotから証明書をマウントする方法

Let's Encryptから証明書を発行および更新する公式のcertbothttps://certbot.eff.org )ツールは、現在有効な証明書を${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ディレクトリのみをマウントする場合、Dockerコンテナ内で実行されているプログラムは、相対的なシンボリックリンクが原因で、必要な証明書データのロードに失敗します。

certbotからの最新の(有効な)証明書データをDockerコンテナー内でどのように使用できますか?

3
NoMad

相対シンボリックリンクは、2層上(domainフォルダーからliveフォルダー、liveフォルダーからrootフォルダー)にマップされ、次にarchiveフォルダーに入り、最後にdomainサブフォルダーに入ります。

マウントを回避するにはallドメインサブディレクトリ、すべての証明書データへのアクセスを許可するには、2つのマウントを使用する必要があります。

Dockerホストのディレクトリ構造

Dockerホスト上でcertbotによって作成された次のディレクトリ構造を想定します。

/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)。

3
NoMad