docker - 在 Docker 上重新加载 Letsencrypt 证书

标签 docker nginx lets-encrypt

我在 Docker 容器中运行 Nginx,我需要定期重新加载其配置以获取更新的 Letsecnrypt SSL 证书。

docker-compose 文件中我有以下内容

command: "/bin/sh -c 'while :; do sleep 6h & wait $${!}; nginx -s reload; done & nginx -g \"daemon off;\"'"

据我所知,应该每 6 小时重新加载配置并重新启动 Nginx。但是,它不起作用。 SSL 证书已更新,但 Nginx 未获取。

关于如何每隔几个小时正确重新加载 Letsencrypt SSL 证书有什么想法吗?

2019 年 8 月 8 日更新

根据我的理解,这个问题与我挂载到容器中的证书文件实际上是符号链接(symbolic link)有关,而符号链接(symbolic link)不能很好地与 Docker 配合使用。

最佳答案

如果您能够使用主机的 crontab 进行调度,这应该可行:

0 */6 * * * docker exec <nginx_container_id> nginx -s reload

通过Source

然后不要指定您在问题中尝试的等待和重新加载的自定义命令。只需编排 reload来自主机的 cron。

但是,如果您不能在您的环境中使用主机的 cron,您将需要另一种解决方案...

关于docker - 在 Docker 上重新加载 Letsencrypt 证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57184669/

相关文章:

docker - LetsEncrypt 的 TLS 证书是否应该位于所有容器上?

bash - 如何在docker-compose卷中使用bash命令命令?

docker tomcat 日志问题

java - Spring Boot 应用程序无法检测类路径中存在的文件

ruby-on-rails - 未使用 RoR 4、Nginx、Unicorn 提供的 Assets

ssl - Digital Ocean Cyber​​Panel(在 Ubuntu 18.04 上): ACME certificates blocked forbidden - 283 Failed to obtain SSL for domain. [issueSSLForDomain]

node.js - 如何使用 Docker-Compose 将多个 MEAN 应用程序容器部署到 Azure

php - 如果找不到,我们如何使用 Apache 重定向到新的 HTML 静态内容并回退到旧的基于 CMS 的 PHP 版本? (nginx try_files)

ruby-on-rails - Ruby on Rails 路由 : Multiple namespaces and multiple domains: best practice?

ssl - 设置配置器/安装程序/身份验证器的标志太多 'webroot' -> 'nginx'