Constantin
Добрый день.
George
привет-привет
Constantin
Подскажите пожалуйста, есть ли возможность обновить контейнер после возникновения внешнего события. Например у меня есть сервер и клиенты. Сервер развернут в контейнере, клиенты качают обновления. Если клиент скачал обновление он пишет в БД запись. Как только все клиенты получили обновления нужно обновить сервер.
George
нет
George
если у приложения есть автообновление, то его поведение в контейнере и вне не будет отличаться. Хотя я бы все равно 10 раз порекомендовал подумать следует ли так делать
George
т.к. все данные, которые изменяются относительно образа - пишутся на эфемерный слой
George
поэтому верный путь обновления ПО - перестартовать его с нового образа
George
но сделать это изнутри контейнера можно только, если прокинуть внутрь docker socket
George
а это сразу риски по ИБ
George
причем существенные
Constantin
Мне не надо изнутри. Обновлять образ внутри контейнера моветон.
Constantin
Это все понятно.
Constantin
Можно ли как-то обновить контейнер в зависимости от события?
central
Constantin
скрипты это решение, как и какая-то служба которая запускает эти скрипты. А с помощью webhook-ов и штатных средств можно этого добиться?
su
Constantin
Я думаю в качестве web-cервера использовать тот же что и для публикации образов
kSandr
George
kSandr
kSandr
kSandr
ну и как сказали выше , всегда можно наговнять и обмазаться баш скриптами
Constantin
Это если сервак один, тогда да. А если решение представляет клиент-серверную архитектуру причем сервер у клиентов и непонятно что у них с связью, внутренними политиками и т.д. то CI вряд ли поможет.
kSandr
George
ну, смотри. Повторюсь - можно засунуть автообновление внутрь контейнера. Ты же можешь устанавливать софт внутри контейнера
George
но это такое себе
Constantin
Дык поэтому и спрашиваю
George
kSandr
- клиент-серверная архитектура,
- сервер у клиентов
George
т.е. твоя задача передать им пакет с обновлением
kSandr
а что у тебя ? )))))) ахахахахах
Constantin
Constantin
а у меня репозиторий образов
kSandr
верно
это просто пример наркомании )
su
novaqq
kSandr
тогда ansible?
так сервер же у клиентов, а не у него, как он будет ходить к клиентам
kSandr
ансибл предполагает что сервер у него к которому он ходит
Constantin
kSandr
верно
ты всегда можешь вмазать в крон скрипт который будет дергать версию из базы, и сверять с текущей, и если версии расходятся - обновлять до латеста
kSandr
т.е. ты же не можешь ходить и обновлять чужое, ПО , то что не находится у тебя ... т.е. если П.О. у клиента, то это уже его ответственность и он сам уже должен следить за обновлениями получается, ... либо по крону трекать последнюю версию и обновлять её , но не уверен как это должно реализоваться извне контейнера , т.е. если у тебя нет доступа на саму клиентскую машину, а только на то, что внутри контейнера .... хотя ты всегда можешь запускать контейнер с прокинутым внутрь сокетом докера и дергать за докер изнутри )
Constantin
George
ну, в общем, опять вопрос не докер специфичен. Как таковой
kSandr
да
Constantin
Ок. Всем спасибо
Richard
Народ, а какую команду поставить на сервер , чтобы он запускался после бд?
kSandr
simplemice.eth
Richard
A в docker-compose ?
su
kSandr
Richard
Richard
Шутники , а
Richard
su
в докер компоуз безопасно, ж
Vasiliy
а как-то можно форсировать чтобы сеть оверлей наползла на воркера в сварме?
Richard
 # Ключевое слово 'depends_on' позволяет указывать, должен ли сервис,    # прежде чем запуститься, ждать, когда будут готовы к работе другие сервисы.    # Нам нужно, чтобы сервис 'client' дождался бы готовности к работе сервиса 'server'.    depends_on:      - server
Это оно?
George
George
В твоём случае
George
https://habr.com/ru/post/454552/#comment_20240656
George
Вот так, но это костыль
George
Richard
George
Ты понимаешь, что "контейнер создан" и "контейнер готов" - это два принципиально разных статуса ?
George
А чего?
Точно не того, что контейнер готов к приему трафика
Richard
А без костылей, тогда как?
Vasiliy
это веб 3.0.. тут всё на костылях))
Richard
Restart: always, понял
George
Например, приложение подтягивает с диска файл 1гиб, а потом падает
George
Зачем лишний раз диск дрочить?
kSandr
Restart: always, понял
можешь использовать что-то вроде такого ...
cat /home/wait.sh
#!/bin/sh
# wait-for-postgres.sh
set -e
host="$1"
service="$2"
shift
cmd="$@"
until docker exec "$host" ps | grep "$service" > /dev/null ; do
>&2 echo "Service is unavailable - sleeping"
sleep 1
done
#>&2 echo "Service is up - executing command"
#exec $cmd
George
Oh wait #$_-$&$-_- shit ^€€¥^-#-#__
George
Мы аналогично healthy проверяли