@docker_ru

Страница 1161 из 1375
Ruslan
04.04.2019
17:23:25
Приветы. Почитал тут про entrypoint (последнюю переписку за несколько месяцев) и решил вопросов задать. Хочу использовать образ postgres:9.6 и не отказываться от docker-compose.

Если сделать docker-compose up -d, очень быстро запускается ENTRYPOINT, отрабатывает и перезапускается уже как CMD, без ENTRYPOINT. При этом, выглядит как грязный хак, что слово postgres из команды, используется и как первый параметр в ENTRYPOINT — не только как имя бинаря, но и как юзернейм. Наверное, это очень красиво, но очень ограничивает в возможностях использования.

Есть проблемы с вызовом ENTRYPOINT из docker-compose up -d, нет их в docker-compose run servicename. За и против одного и второго: + первого в том, что можно определять имя контейнера, порты. - первого в том, что вечный рестарт и ничего не работает (отдельная тема для обсуждения) + второго в том, что можно управлять вызовом ENTRYPOINT и делать свои чёрные дела, перед первым запуском postgres как процесса с PID 1 - второго в том, что отваливаются имена контейнеров, порты

Google
Ruslan
04.04.2019
17:24:03
Мои хотелки: 0. не пересобирать образ 1. подключить кастомизированный src/docker-entrypoint.sh:/docker-entrypoint.sh:ro вольюмом 2. docker-compose up -d и оно пошло вызывать ENTRYPOINT (главное — предсказуемо) 3. postgres запустился уже с теми данными, которые насоздавались в третьем пункте

И да, это всё для /usr/lib/postgresql/9.6/bin/pg_basebackup -h "$SRC_HOST" -U "$SRC_USER" -P -v -D "$PGDATA" -w -P

George
04.04.2019
17:26:44
И да, это всё для /usr/lib/postgresql/9.6/bin/pg_basebackup -h "$SRC_HOST" -U "$SRC_USER" -P -v -D "$PGDATA" -w -P
а что мешает pg_basebackup запускать в отдельном контейнере?

вся эта магия нафиг не нужна с кубернетесом - подготовили данные и поехали. Почему так странно сделано в докере штатном - он должен заинитить БД, если ее нет.

Т.е. образ как бы самодостаточный

и еще я рекомендую pg_probackup

Ruslan
04.04.2019
17:28:30
Что-то в этом есть. То есть, определить два сервиса? 1. для реплицирования с мастера, рестарт: никогда 2. для работы с этими данными, зависим от первого и не запускается, пока тот не отработает так?

George
04.04.2019
17:28:54
типа того

я просто задачу изначальную не знал )

касательно порядка запуска в рамках докер-компоуза - это решается, но решается некрасиво

Ruslan
04.04.2019
17:29:50
Да, я недостаточно подробно описал кейс. Спасибо

и еще я рекомендую pg_probackup
Пока не могу так сделать. Надо ограничиться использованием штатного образа и просто правильно его готовить :( Вопрос про то, как лучше сделать первый сервис: 1. переопределяю entrypoint: [] 2. переопределяю command: ["/usr/lib/postgresql/9.6/bin/pg_basebackup", "-h", "${SRC_HOST}", "-U", "${SRC_USER}", "-P", "-v", "-D", "${PGDATA}", "-w", "-P"] ... X. PROFIT!!!1! Так?

Google
George
04.04.2019
17:43:28
как бы не особо потеря. Главное, чтобы каталог с данными существовал, а то будет подстава

т.е. запуск поверх уже существующей БД - не проблема. Проблема создать все необходимые каталоги

Ruslan
04.04.2019
17:45:36
тогда получится в момент запуска: /usr/lib/postgresql/9.6/bin/pg_basebackup -h "$SRC_HOST" -U "$SRC_USER" -P -v -D "$PGDATA" -w -P postgres, вместо /usr/lib/postgresql/9.6/bin/pg_basebackup -h "$SRC_HOST" -U "$SRC_USER" -P -v -D "$PGDATA" -w -P

Ruslan
04.04.2019
17:46:03
а, ок

сейчас поиграюсь, спасибо

Ruslan
04.04.2019
19:12:41
В продолжение своего вышеописанного эпоса, родил пару новых вопросов: 1. можно ли использовать что-нибудь вроде order: stop-first, без использования swarm? 2. как использовать depends_on: db-prepare, если хочется не запустить другой сервис сразу после запуска некоего сервиса db-prepare, а дождаться того момента, когда тот отработает и остановится? Цель: разделить подготовку БД и запуск контейнера с данными, которые подготовил другой контейнер. Возможно, цель поставлена неверно.

Ruslan
04.04.2019
19:15:11
А контейнер с БД запускается без враппера, просто командой postgres, PID=1

как быть?

спасибо, я не сразу понял, что healthcheck — ключевое слово

Ruslan
04.04.2019
19:31:05
нет, просто я решил, что хелсчек надо делать перед запуском демона, в скрипте

Похоже, что я пробую какие-то несуществующие кейсы: services: init: volumes: - pgdata:/var/lib/postgresql/data healthcheck: start_period: 40s ... db: volumes: - pgdata:/var/lib/postgresql/data depends_on: init: condition: service_unhealthy ... А именно: - не бывает service_unhealthy, а так хочется проверить, что оно stopped, или unhealthy - общий volume pgdata и надо с ним работать только поочереди, а не надеяться на то, что битая БД будет поводом к останову второго контейнера.

Какие есть предложения, что мне почитать ещё?

Andor
04.04.2019
20:58:56
А чо надо-то?

Запуск постгреса не требует этой херни

Google
Ruslan
04.04.2019
21:19:15
Есть потребность выполнить предварительную репликацию с мастера. Разделил на два контейнера, так как с одним ещё больше печалей

Andor
04.04.2019
21:22:05
Сделай чтобы один контейнер можно было запускать сколько угодно раз без слома чего-то

Ну или просто возьми готовый патрони

George
05.04.2019
05:19:15
я @Andorka рассказывал. Выбери интервал времени за которое миграция гарантированно отрабатывает. Это будет время опроса хелсчека. Далее в конце миграции делаешь && touch /tmp/flag && sleep 10000 и в хелсчеке test -f /tmp/flag

профит

но вообще натягивать это на докер-компоуз - то еще удовольствие

либо тебе нужен внешний оркестратор. В конце-концов, можешь проверять код возврата контейнера в баше

типа #!/bin/bash docker run my_migrations # здесь проверяем код возврата, если ошибка - на выход docker run -d postgres

Ruslan
05.04.2019
07:08:26
Ну или просто возьми готовый патрони
Патрони... Кто же мне даст их использовать, вместо того, что на боевой базе? (На мастере)

Ilia
05.04.2019
07:11:30
Сделай чтобы один контейнер можно было запускать сколько угодно раз без слома чего-то
как это сделать с монгой -.- как ее вообще использовать в контейнерах -.-

Andor
05.04.2019
07:12:04
берёшь готового оператора...

Ruslan
05.04.2019
07:15:59
делай наоборот
Если проверять healthy, то да - это работает, хотя и небезопасно - постгрес может в любой момент решить, что всё докачалось и начнёт портить данные, каким-либо способом

Идея нравится

Andor
05.04.2019
07:18:53
composer: <<: *php-cli working_dir: /var/www/nexus/lib healthcheck: test: test -f /tmp/.composer.done interval: 2s timeout: 1s retries: 120 environment: SLEEP_BEFORE_EXIT: '1' entrypoint: - bash - -e - -c - > rm -f /tmp/.composer.done; case $$0 in install) composer "$$0" --no-interaction "$$@"; ;; *) composer "$$0" "$$@" ;; esac; touch /tmp/.composer.done && ( [[ $$SLEEP_BEFORE_EXIT == 1 ]] && sleep 5 || true ); command: - install

наслаждайся девопс-веем 2019 года

Ruslan
05.04.2019
07:21:54
Ой-вей, как говорится ?

Спасибо, попробую

Папідоха
05.04.2019
07:42:12
Привет, всем. У меня какая-то невероятная дичь. Есть nodejs програмка, что запускается в контейнере и принимает запроси на конкретном порту. Ей достаточно ресурсоав, она уже даже автоматизирована, но она засыпает и не могу понять почему

Google
Папідоха
05.04.2019
07:42:45
Тоесть если бомбить приложение запросами, то ему норм, хоть в 100 потоков

Но если его оставить без дела на несколько минут, то вернет 502-ю, а после нескольких обновлений страницы снова заведется

Вы с таким не сталкивались?

Andor
05.04.2019
07:45:15
У меня какая-то невероятная дичь. Есть nodejs програмкаможно не продолжать было

Вы с таким не сталкивались?
нет, мы с твоим приложением скорее всего не сталкивались

502 само приложение возвращает или реверс-прокси перед ним?

Папідоха
05.04.2019
07:45:53
nginx возвращает

Vlad
05.04.2019
07:46:02
о, блокчейн весит 300 гигов?

George
05.04.2019
08:21:05
Arczi
05.04.2019
08:25:04
Парни как сделать что бы после выполнение CMD в dockerfile контенер дальше жил ??

Andor
05.04.2019
08:25:36
никак

Viktor
05.04.2019
08:27:48
CMD [ cmd; tail -f /bin/bash ] как костыль

Andor
05.04.2019
08:28:10
sleep infinity

Arczi
05.04.2019
08:29:08
sleep infinity
это делает мой контенер php-fpm недоуступным для nginix

Andor
05.04.2019
08:29:33
что?

Denis 災 nobody
05.04.2019
08:29:34
если влили образы докера в хранилище, как их пускать через docker-compose?

(в приватную репу)

Andor
05.04.2019
08:29:46
так же как и для публичного реджистри

Denis 災 nobody
05.04.2019
08:30:00
я так понимаю, надо тогда писать другой докер-компоуз..

Google
Andor
05.04.2019
08:30:16
имя образа будет другое, очевидно

Denis 災 nobody
05.04.2019
08:30:44
docker tag kamailio:latest 1.1.1.1:5000/kamailio docker push 1.1.1.1:5000/kamailio

Andor
05.04.2019
08:31:02
жесть

Denis 災 nobody
05.04.2019
08:31:06
что?

Andor
05.04.2019
08:31:13
2019 год на дворе, а они ip-адреса хардкодят

Arczi
05.04.2019
08:31:23
что?
502 bad request logi говорят что не может до fpm достучаться, убераю CMD с sleep infinity и все работает

Andor
05.04.2019
08:31:54
502 bad request logi говорят что не может до fpm достучаться, убераю CMD с sleep infinity и все работает
диагностика 80 уровня прям у тебя и так php-fpm запускается и висит, если он выходит, значит ты делаешь что-то не так

Denis 災 nobody
05.04.2019
08:32:01
сути не меняет

сейчас есть компоуз файл где запускается сборка из папки

kamailio: build: context: kamailio dockerfile: Dockerfile ports: - "5080:5080"

Andor
05.04.2019
08:33:26
если добавишь туда image то при сборке компоуз сам будет вешать тег на имдж

останется только сделать push

Denis 災 nobody
05.04.2019
08:38:27
хм, спасибо

Страница 1161 из 1375