Docker 主机目录结构

Docker 主机目录结构

官方certbothttps://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目录时,由于相对符号链接,docker 容器内运行的程序将无法加载所需的证书数据。

如何certbot在 Docker 容器中使用最新(有效)的证书数据?

答案1

相对符号链接被映射到上层 2 层(从domain文件夹到live文件夹,从live文件夹到root文件夹),然后进入archive文件夹,最后进入其中domain的子文件夹。

为避免安装全部域子目录,可以访问所有证书数据,我们必须使用 2 个挂载。

Docker 主机目录结构

我们假设 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)。

相关内容