我确实使用 nginx 实现了一个 docker 容器,并且可以成功地使用 certbot 更新 SSL 证书。它们是使用以下代码生成的独立容器。
他们有一个外部文件夹来共享文档,但我总是必须停止/启动 nginx 容器才能应用这些更新的文件内容。Nginx reload 命令也不起作用。如果我进入容器内部,文件似乎是容器首次启动时的副本。
在我之前的 VM 架构中,nginx 会自动应用这些更改。
如何避免重新启动 nginx 容器?
创建 nginx 容器:
docker container run --restart always -d --name nginxXYZ -p 80:80 -p 443:443 -p 25:25 -p 587:587 \
-v /root/nginx/nginx.conf:/etc/nginx/nginx.conf/:ro \
-v /root/nginx/nginx-log:/var/log/nginx/:rw \
-v /root/nginx/letsencrypt/:/etc/letsencrypt/ \
-v /root/nginx/certbot/www/:/var/www/certbot/ \
nginx:1.24.0
续订证书:
docker container run --rm -it -p 8080:80 \
-v /root/nginx/letsencrypt/log:/var/log/letsencrypt/ \
-v /root/nginx/letsencrypt/:/etc/letsencrypt/ \
-v /root/nginx/certbot/www/:/var/www/certbot/ \
certbot/certbot:latest \
certonly --webroot --webroot-path /var/www/certbot/ -d www.company.com -m "[email protected]" --agree-tos
答案1
您可以尝试重新加载 nginx:
docker container run --rm -it -p 8080:80 \
-v /root/nginx/letsencrypt/log:/var/log/letsencrypt/ \
-v /root/nginx/letsencrypt/:/etc/letsencrypt/ \
-v /root/nginx/certbot/www/:/var/www/certbot/ \
-v /path/to/host/script-directory:/scripts \
certbot/certbot:latest \
certonly --webroot --webroot-path /var/www/certbot/ -d www.company.com -m "[email protected]" --agree-tosSa
将此脚本(例如,作为 reload-nginx.sh)保存在主机上可从 certbot/certbot 容器内访问的目录中。
#!/bin/bash
# Reload Nginx configuration on the host machine
nginx -s reload
# Exit the script
exit 0
在 Certbot 获取或更新 SSL 证书后,您可以从 certbot/certbot 容器内执行脚本以触发主机系统上的 Nginx 配置重新加载。您可以通过在容器内运行以下命令来执行此操作:
docker container exec -it CONTAINER_ID /bin/bash -c "/scripts/reload-nginx.sh"