docker - nginx ssl docker没有这样的文件或目录
问题描述
我有一个使用 docker compose 设置的 nginx 容器,它使用在主机上生成的证书。但是当我运行它时,它告诉我找不到证书。
nginx | nginx:[emerg] SSL_CTX_use_PrivateKey_file(“/etc/letsnecrypt/live/example.com/privkey.key”)失败(SSL:错误:02001002:系统库:fopen:没有这样的文件或目录:fopen('/etc/letsnecrypt /live/example.com/privkey.key','r')错误:20074002:BIO 例程:file_ctrl:系统库错误:140B0002:SSL 例程:SSL_CTX_use_PrivateKey_file:系统库)
但是当我使用进入容器docker-compose run nginx /bin/bash
并进入 cert 文件夹时,它们确实存在。
那么为什么我会收到错误消息?
我的 nginx 配置:
server {
listen *:443;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsnecrypt/live/example.com/privkey.key;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
access_log /dev/stdout upstreamlog;
error_log /dev/stderr debug;
}
码头工人-compose.yml:
版本:'3.5'
services:
nginx:
container_name: nginx
image: nginx
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
- ./nginx.default:/etc/nginx/conf.d/default.conf
- /etc/letsencrypt:/etc/letsencrypt
解决方案
我不确定这是否会回答这个问题,但这确实解决了我的问题,这与你的问题非常相似。
简短(可能)的答案:
Certbot 将软链接中的每个文件live
返回到archive/domain.com/
.
当您这样做时,软链接可能会以某种方式中断docker-compose up
。
解释
我的设置有类似的问题,我docker-compose.yml
的设置是这样的
services:
web:
image: nginx:alpine
volumes:
- ./letsencrypt/etc/live/${DOMAIN}/:/var/certs/:ro
./letsencrypt/etc/
是 Certbot 放置生成证书的地方。
Certbot 建立了一个软链接live
,../../archive/domain.com/
所以当我docker-compose run web /bin/sh
查看文件系统时,我发现了断开的链接!
/certs # ls -la
total 12
drwxr-xr-x 2 root root 4096 Aug 31 17:25 .
drwxr-xr-x 33 root root 4096 Aug 31 17:44 ..
-rw-r--r-- 1 root root 682 Aug 31 17:25 README
lrwxrwxrwx 1 root root 37 Aug 31 17:25 cert.pem -> ../../archive/domain.com/cert1.pem
lrwxrwxrwx 1 root root 38 Aug 31 17:25 chain.pem -> ../../archive/domain.com/chain1.pem
lrwxrwxrwx 1 root root 42 Aug 31 17:25 fullchain.pem -> ../../archive/domain.com/fullchain1.pem
lrwxrwxrwx 1 root root 40 Aug 31 17:25 privkey.pem -> ../../archive/domain.com/privkey1.pem
简单的解决方案是编辑docker-compose.yml
文件以返回几个目录。
services:
web:
image: nginx:alpine
volumes:
- ./letsencrypt/etc/${DOMAIN}/:/var/certs/:ro
一旦 nginx 配置与新位置匹配,nginx 发现证书没有问题。
推荐阅读
- java - 如何随机给学生设置课程?
- python - 使用所有列重新采样多维数据系列
- python - Python 从具有多个数据的函数中获取特定值
- excel - 如何使用 Excel 公式将两列值与另外两列匹配
- mysql - 在 mysql 中使用 CASE 函数但出现错误代码:1241 时出现问题。操作数应包含 1 列
- reactjs - oauth2 客户端凭据流 Cors 问题
- assembly - 我如何在 NASM x86 中定义宏
- r - 当文本具有不同数量的字符时,右对齐 y 轴文本
- python - 删除空白行后如何获取更新的csv文件?
- python - 我想通过 Boost.python 用 OpenCV 编译一个 C++ 程序以在 python 脚本中使用