2017-02-21 17 views

ответ

4

Я не рекомендую устанавливать 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.

+0

Не опасно иметь внешнюю точку входа для перезапуска nginx? – Tali

+0

Зависит от вашей среды. Существует множество опций. Вы можете делиться конфигурационными данными, есть множество других опций. –

+0

Проблема заключается в том, что я должен быть пользователем root, чтобы перезапустить nginx, и, если возможно, я предпочитаю не иметь внешнюю точку входа. – Tali