如何配置让我们在 docker 镜像中为 nginx 加密证书?

Pen*_*esh 5 encryption ssl nginx docker lets-encrypt

我知道如何为 nginx 配置让我们加密。我很难配置让我们在 docker 映像中使用 nginx 加密。Let's encrypt 证书在etc/letsencrypt/live文件夹中是符号链接的,我无权查看里面的真实证书文件/etc/letsencrypt/archive

有人可以建议出路吗?

and*_*mel 5

我补充一下我的错误。也许有人会发现它很有用。

我挂载了letsencrypt 的/live 目录而不是整个letsencrypt 目录树。

问题在于:
/live 文件夹仅包含指向 /archive 文件夹的符号链接,该文件夹未使用我的方法安装到 docker 容器。(事实上​​,我什至安装了一个符号链接到 live 文件夹的 /certs 文件夹,因为我在开发环境中有那个 certs 文件夹,同样的问题......真正的(符号链接的)文件没有安装)

当我挂载 /etc/letsencrypt 而不是 /live 时,所有问题都消失了

我的 docker-compose.yml 的一部分

  services:
    ngx:
      image: nginx
      container_name: ngx
      ports:
        - 80:80
        - 443:443
      links:
        - php-fpm
      volumes:
        - ../../com/website:/var/www/html/website
        - ./nginx.conf:/etc/nginx/nginx.conf
        - ./nginx_conf.d/:/etc/nginx/conf.d/
        - ./nginx_logs/:/var/log/nginx/
        - ../whereever/you/haveit/etc/letsencrypt/:/etc/letsencrypt
Run Code Online (Sandbox Code Playgroud)

该配置中的最后一行是重要的。改成从

- ./certs/:/etc/nginx/certs/
Run Code Online (Sandbox Code Playgroud)

在我的情况下,/certs 是 /etc/letsencrypt/live 的符号链接。这不能像我上面描述的那样工作。


Pen*_*esh 4

如果有人遇到这个问题,我已经通过将文件夹安装到 docker 容器中来解决它。

  • 我已将etc/letsencryptetc/ssl文件夹安装到 docker 中
  • Docker 有-v用于挂载卷的标志。不要忘记打开port 443容器。

根据您的安装方式,可以在 docker 容器中启用 https,而无需更改 nginx 路径。

docker run -d -p 80:80 -p 443:443 -v /etc/letsencrypt/:/etc/letsencrypt/ -v /etc /ssl/:/etc/ssl/ <image name>
Run Code Online (Sandbox Code Playgroud)

  • 那么您的主机上有 LetsEncrypt (certbot) 客户端吗?我遇到的问题是 nginx 容器需要运行才能获取并安装证书。然后,您必须更改 nginx 配置以包含这些证书。您是否在未附加到容器并手动运行这些命令的情况下遇到过此问题? (2认同)