Вы должны добавить --post-hook к команде renew, которая использует s sh для отправки команды перезагрузки nginx на хост.
Чтобы это работало, контейнеру нужны для запуска с network_mode: "host"
, тогда вам нужно isntall sshpass
и openssh
при запуске / воссоздании контейнера. это делается с помощью apk add openssh sshpass
, затем в перехвате необходимо s sh в хост и перезагрузить nginx
sshpass -p 'your password' ssh -o 'StrictHostKeyChecking no' root@localhost 'systemctl reload nginx'
при условии у вас есть root доступ. При этом используется sshpass для ввода пароля в s sh, который пропускает сообщение «Вы хотите добавить отпечаток пальца» и отправляет команду реляции на localhost
, помещая все это в docker -композитный внешний вид файла вот так:
certbot:
image: certbot/dns-ovh
container_name: certbot
network_mode: "host"
volumes:
- /etc/letsencrypt/:/etc/letsencrypt
- /var/lib/letsencrypt:/var/lib/letsencrypt
- /root/.secrets/certbot-ovh.ini:/root/.secrets/ovh-creds.ini
entrypoint: >
/bin/sh -c
'apk add openssh sshpass &&
trap exit TERM; while :;
do certbot renew --post-hook
"sshpass -p '"'"'your password'"'"' ssh -o '"'"'StrictHostKeyChecking no'"'"' root@localhost '"'"'systemctl reload nginx'"'"'";
sleep 12h & wait $${!}; done;'
>
здесь позволяет писать столько строк с отступом, сколько я хочу, без необходимости добавлять еще один слой экранирования. он также объединяет строки в одну строку позже.
'"'"'
, используемый здесь, используется для выхода из одиночного '
внутри кавычек --post-hook, закрывает первую одинарную кавычку, открывает новую двойная кавычка, которая содержит одинарную кавычку, а затем снова открывает одинарную кавычку.