我在一个M1 MacBook的Docker容器中运行nginx。
作为其中的一部分,我试图使一些letsencrypt证书可用。
在我的docker-compose文件中,
volumes:
- ${PWD}/infrastructure/nginx/nginx.conf:/etc/nginx/nginx.conf:ro
- ${PWD}/logs/nginx:/var/log/nginx:rw
- /private/etc/letsencrypt/live:/etc/letsencrypt/live
- ${PWD}/apps/fallback-server/static:/var/www/apps/fallback-server/static
- ${PWD}/apps/server/data/static-apps:/var/www/apps/server/data/static-apps
字符串
当我启动容器时,我会看到以下内容(为了便于阅读而添加的换行符:
web-proxy-1 | nginx: [emerg] cannot load certificate
"/etc/letsencrypt/live/example.com/fullchain.pem": BIO_new_file() failed (SSL:
error:80000002:system library::No such file or directory:calling
fopen(/etc/letsencrypt/live/example.com/fullchain.pem, r) error:10000080:BIO routines::no such file)
型
请注意,没有关于丢失nginx.conf
的投诉。
我的文件共享设置为包括/private
:
x1c 0d1x的数据
但是,错误消息和文件的此视图都表明文件尚未进入容器:
的
我所有的网上搜索往往指向指向文件共享的解决方案,但据我所知,这是正确的设置。
我接下来可以采取哪些步骤来解决这个问题?
我所有的网上搜索往往指向指向文件共享的解决方案,但据我所知,这是正确的设置。
值得注意的一点是,如果我运行服务web-proxy
:
docker compose run -i -t web-proxy /bin/sh
型
我能看到文件。
我接下来可以采取哪些步骤来解决这个问题?
1条答案
按热度按时间rn0zuynd1#
事实证明,有几件事正在发生。
首先,
live/
中的文件是../../archive/
的软符号链接,因此如果不挂载该目录,它们将无法工作。第二,这些文件是由具有高度限制权限的root用户拥有的。由于我以非root用户的身份运行Docker,因此该进程无法访问这些文件。
解决方案(在这种特定情况下)是以运行Docker的同一用户身份运行
certbot