如何在 Docker 容器中 运行 Nginx 并将其设置为每 6 小时重新加载一次配置?

How to run Nginx within a Docker container and set it up to reload its configuration every 6h?

我在 Docker 容器中运行 NGINX,我正在尝试找到一种使用 docker run 启动它的方法,以便命令我的 NGINX 重新加载其配置每 6 小时。我需要这样做,因为我也在另一个容器中使用 Certbot,并且我希望 SSL 证书更新过程自动化和应用,为此我需要 NGINX 按计划重新加载其配置。

此时我使用以下 docker run 序列(或多或少):

docker run --restart=always -d -p 80:80 -p 443:443 \ --name=nginx_RevPr nginx:latest \ /bin/bash -c 'while :; do sleep 6h & wait ${!}; nginx -s reload; done & nginx -g "daemon off;"'

以这种方式创建的容器 运行 并且工作正常。我遇到的唯一问题是我实际上不知道 NGINX 是否真的重新加载了它的配置。 docker logs 没有显示任何内容。

我想从两个方面来解决这个问题:

  1. 如何输出到终端/docker 日志 (echo?) 成功 nginx -s reload 修改我的 /bin/bash -c 'while :; do sleep 6h & wait ${!}; nginx -s reload; done & nginx -g "daemon off;"'?
  2. 万一我遗漏了什么(我是 Docker 和 NGINX 的初学者):你有没有找到一种方法来以更合理的方式获得我想要的结果?

请不要建议Docker撰写。

感谢您的关注。

好的,我开始工作了。 我将 CMD args 行更改为:

/bin/sh -c 'while :; do sleep 6h & wait ${!}; nginx -s reload && echo NGINX config reload for Certbot - OK; done & nginx -g "daemon off;"'

我的主要错误是使用 /bin/bash 进入 CMD,我应该这样做 /bin/sh。以下 nginx -s reload && echo NGINX config reload for Certbot - OK 解决了通知 docker logs 关于配置重新加载的问题。