Я не рекомендую устанавливать ssh
, Docker
контейнеры не являются виртуальными машинами, и должны уважать архитектуру микросервисов, чтобы воспользоваться многими преимуществами, которые она предоставляет.
Для отправки сигнала от одного контейнера другому, Вы можете использовать API докеров.
Прежде всего вам необходимо поделиться /var/run/docker.sock
между необходимыми контейнерами.
docker run -d --name control -v /var/run/docker.sock:/var/run/docker.sock <Control Container>
послать сигнал в контейнер с именем Nginx вы можете сделать следующее:
echo -e "POST /containers/nginx/kill?signal=HUP HTTP/1.0\r\n" | \
nc -U /var/run/docker.sock
Другой вариант использует пользовательское изображение, с помощью специального сценария, который проверяет Nginx файлы конфигурации и если хэш изменяется, передает сигнал перезагрузки. Таким образом, каждый раз, когда вы меняете конфигурацию, nginx будет автоматически перезагружаться, или вы можете перезагрузить вручную, используя комментарии. эти типы скриптов распространены среди пользователей kubernetes
. Ниже приведен пример:
nginx "[email protected]"
oldcksum=`cksum /etc/nginx/conf.d/default.conf`
inotifywait -e modify,move,create,delete -mr --timefmt '%d/%m/%y %H:%M' --format '%T' \
/etc/nginx/conf.d/ | while read date time; do
newcksum=`cksum /etc/nginx/conf.d/default.conf`
if [ "$newcksum" != "$oldcksum" ]; then
echo "At ${time} on ${date}, config file update detected."
oldcksum=$newcksum
nginx -s reload
fi
done
Не забудьте установить пакет inotifywait
.
Не опасно иметь внешнюю точку входа для перезапуска nginx? – Tali
Зависит от вашей среды. Существует множество опций. Вы можете делиться конфигурационными данными, есть множество других опций. –
Проблема заключается в том, что я должен быть пользователем root, чтобы перезапустить nginx, и, если возможно, я предпочитаю не иметь внешнюю точку входа. – Tali