问题描述
我需要每6小时重新加载nginx docker容器(对于Letsencrypt certificate renewal)。
所以我想出了这个(骇人的方法):
# Dockerfile
FROM nginx:1.19.4-alpine
# replace the first empty line
RUN sed -i '1,/^$/{s/^$/\nwhile :; do sleep 6h \& wait ${!}; done \&\n/}' /docker-entrypoint.sh
因此docker-entrypoint.sh的第一行从:
#!/bin/sh
# vim:sw=4:ts=4:et
set -e
收件人:
#!/bin/sh
# vim:sw=4:ts=4:et
while :; do sleep 6h & wait ${!}; done &
set -e
我为什么要这样做?我想保持官方形象,并尽量减少自己的修改。这样,维护的工作量应该减少了(不同于我自己的输入脚本)。
我正在寻找有关以下方面的反馈意见:
- 我知道这是黑客。但是我猜想入口文件在将来的某个时刻几乎没有空行的机会。你怎么说?
- 我已经测试了它的睡眠时间短一些,
echo
,并且可以正常工作。仍然,您发现它有任何问题吗? - 当
docker stop
命令向PID 1(此处为nginx)发送信号时,sleep 6h
进程也将被杀死,并且没有像僵尸进程或其他任何副作用吗? - 有点不对劲:
nginx -s reload
没记录什么吗?我还没有在docker logs
中看到“已重新加载”消息。甚至没有supposedly debug mode:docker run -d nginx:latest 'nginx-debug' '-g' 'daemon off;'
。尝试了两种方式:
docker exec -it ceff1757061f nginx -s reload
2020/11/11 22:12:48 [notice] 36#36: signal process started
docker exec -it ceff1757061f sh
/ # nginx -s reload
2020/11/11 22:13:13 [notice] 57#57: signal process started
在nginx容器日志中仍然没有“重新加载”消息。
谢谢
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)