
Денис
26.12.2018
18:21:30
Всем привет. Есть докер-компоуз с сервисами. Стоит задача запустить их все, кроме одного. Потом уже в нужный момент дозапустить этот оставшийся контейнер. Не подскажите как можно это сделать?

inqfen
26.12.2018
18:22:15
А какая причина его тормозить?
Докер-композ не умеет в логику, потому или его в скрипт оборачивать, где явно такие сервисы запускаешь, а потом такой

✖️
26.12.2018
18:23:23

Google

inqfen
26.12.2018
18:23:32
Либо в entrypoint клнтейнеру ожидание добавить

Kool
26.12.2018
18:24:21

✖️
26.12.2018
18:24:24
в компоузе для этого сервиса:`cmd: ['./run.sh']`. а в там уже sleep 10; exec gunicorn --foo-bar

Kool
26.12.2018
18:24:31
ставьте restart on error
и ставьте пробовать 5 раз например
с интервалом в 30 секунд
я так понимаю проблема что бекенд стартует раньше базы
ещё можно настроить depends_on
улучшит ситуацию, но мне лично не помогло

✖️
26.12.2018
18:26:20
потому что депенд он не дожидается пока команда в контейнере полностью запуститься
я везде слипы кидаю если очень нужно

Денис
26.12.2018
18:27:32
Докер поднимается для тестов в CI и один из сервисов интерферирует с частью тестов.Поэтому нужно поднять часть сервисов - прогнать тесты, доподнимать и прогнать оставшиеся тесты. Все это из баш-скрипта запускается, так что видимо придется удалить проблемные сервисы из докер-компоуза и дозапускать их отдельно уже в нужный момент.

George
26.12.2018
18:28:02

Google

Kool
26.12.2018
18:28:04
можно подлечить логику приложения
чтобы при старте пытался N секунд подключаться
такой способ сам докер советует

George
26.12.2018
18:28:27

inqfen
26.12.2018
18:28:34

Kool
26.12.2018
18:28:47
Глупость
не глупость, зависит от того как контейнер реализован

✖️
26.12.2018
18:28:59

George
26.12.2018
18:29:02
Расскажу. Делай depends_on: healthy и расставь хелсчек нормально

inqfen
26.12.2018
18:29:04
тесты - одно, развертывание приложения - другое

Kool
26.12.2018
18:29:10
бывают приложения после старта приложения какую то важную логику стартуют (например миграции)

✖️
26.12.2018
18:29:16
либо создать для тестов отдельный компоуз без него

Kool
26.12.2018
18:29:28

George
26.12.2018
18:29:31
Но это сильно хрупкая логика - раз. Два - работает только во второй версии формата докер-компоуза (не третьей)

inqfen
26.12.2018
18:29:39

George
26.12.2018
18:29:55

Kool
26.12.2018
18:30:01

George
26.12.2018
18:30:08

inqfen
26.12.2018
18:30:09
ну или хоть в баш оборачивают, не надо пытаться из докер-композа логику получить)

Kool
26.12.2018
18:30:17
у меня сейчас в тупую рестартит приложуху 5 раз каждые 30 секунд
если нет - выливка фейлится

Google

inqfen
26.12.2018
18:30:30
Это тупо же утилита, которая docker run облегчает

Денис
26.12.2018
18:30:36

inqfen
26.12.2018
18:30:44
Не надо из нее несвойственные задачи трясти

George
26.12.2018
18:30:55

inqfen
26.12.2018
18:31:04

George
26.12.2018
18:31:22
Можно сделать вообще по красоте. Оберни все докеры в системд юниты. И делай любую логику старта

inqfen
26.12.2018
18:31:36

George
26.12.2018
18:31:46

inqfen
26.12.2018
18:31:53
написать плейбук или башскрипт куда проще как по мне
Куда?
на другой сервер например, на 100 других серверов

George
26.12.2018
18:32:10
Докер-компоуз ты в кубер тоже не затащишь

inqfen
26.12.2018
18:32:42
почему в кубер, просто развернуть приложение на 10 инстансах в aws например
просто делаешь скрипт/плейбук, складываешь вместе с кодом и юзаешь как надо

George
26.12.2018
18:33:22

Kool
26.12.2018
18:33:43
а зачем они
есть же сварм

George
26.12.2018
18:34:08

inqfen
26.12.2018
18:34:18
Сварм умер

Google

Kool
26.12.2018
18:34:19
ну лучше чем системд юниты )

George
26.12.2018
18:34:21
Давай так. Отношение к докеру может быть разное
Мы его используем для двух вещей
Быстрая разработка и изоляция сервисов
И микросервисы (кубы, etc)
Первое - абсолютно не противоречит запуску на стендэлоун нодах
Вот представь себе гипотетический случай, что мой докер сервис потребляет файлы из нфс шары
Т.е. она сделана уже системд маунтом и нужно обеспечить старт сервиса только после маунта
Ваши предложения? Мигрировать все в s3?

Kool
26.12.2018
18:36:51
так у докер драйвер есть
для нфс

inqfen
26.12.2018
18:36:59
Не вижу проблем с системд юнитами
Неудобно когда например нужно дать твой код другому разработчику, так в ридми пишешь - стартуешь some.sh
, а с юнитом ему придётся себе ещё и юнит добавлять

George
26.12.2018
18:37:31
Например, эльпайн

inqfen
26.12.2018
18:38:03
У кого-то альпайн на машине стоит?)

George
26.12.2018
18:38:15
Или мы столкнулись, что окружения на mac & linux по-разному фурыкают. В маке очень не хватает xargs -r

inqfen
26.12.2018
18:38:42
не, я про ситуацию с локальной разработкой
В случае CI/CD вся эта логика уходит туда

George
26.12.2018
18:39:04
Я тебе привел пример

Google

George
26.12.2018
18:39:05
Xargs
Скрипты ломаются

inqfen
26.12.2018
18:39:32
Только вот тех же юнитов на маке вроде как вообще нет
Там же наследник фряхи
В общем скрипт для локальной разработки, просто последовательный запуск сервисов через docker-compose
А в случае CI/CD эта фигня не нужна

George
26.12.2018
18:43:45

inqfen
26.12.2018
18:44:10
ага
это точно работает везде

George
26.12.2018
18:44:35
Но нам проще было makefile сделать, чтобы в нем же блоки для сборки контейнеров и запуска тестов описать

inqfen
26.12.2018
18:44:52
даже в powershell работает, если кто вдруг на винде сидит
У нас тесты только в гитлабе
А если кому прямо припрет, то может и локально ручками запустить

LEXASOFT
26.12.2018
21:39:03
вот хороший пример применения миграций с хэлсчеками https://gist.github.com/pantsel/73d949774bd8e917bfd3d9745d71febf

George
26.12.2018
22:45:21
Фактически хелсчеки в нем не используются для зависимости сервисов
Директива links вроде как obsolete
Что ещё покритиковать....