Portál AbcLinuxu, 30. června 2025 08:25


Dotaz: Docker kontejnery se korektně nevypnou při rebootu

1.7.2017 22:00 v
Docker kontejnery se korektně nevypnou při rebootu
Přečteno: 370×
Odpovědět | Admin
Ahoj. Na RHEL 7 mám distribuční docker engine 1.12. Pro každý kontejner mám vlastní systemd unitu:
[Unit]
Requires=docker.service
After=docker.service

[Service]
ExecStartPre=-/usr/local/bin/dockerbootstrapscript.sh stop myapp %i
ExecStart=/usr/local/bin/dockerbootstrapscript.sh start myapp %i
ExecStop=/usr/local/bin/dockerbootstrapscript.sh stop myapp %i
Restart=on-failure

[Install]
WantedBy=multi-user.target


... kde /usr/local/bin/dockerbootstrapscript.sh spouští docker run v popředí.
Pokud dám reboot, tak systém cca 160 sekund visí a pak se násilím vypnou běžící kontejnery a systém se normálně restartuje. Pokud před rebootem zastavím docker engine "systemctl stop docker", pak se kontejnery korektně ukončí (aplikace dostatou TERM) a server se restartuje hned. Jinak další příklad: pokud ukončím všechny běžící kontejnery a nechám běžet jen docker engine, pak je restart také okamžitý.

Nevíte v čem by mohl být problém, proč reboot neukončí korektně běžící kontejnery a docker engine?
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

2.7.2017 21:41 1john2 | skóre: 35 | blog: jo12hn | zlín, brno
Rozbalit Rozbalit vše Re: Docker kontejnery se korektně nevypnou při rebootu
Odpovědět | | Sbalit | Link | Blokovat | Admin
1) jak jsou sestavene image/kontejnery(entrypoint/cmd)? jsou to servisni tzn pid 1 je vlastni sluzba nebo je tam nejaky spravce procesu?

2) jak je nastavena restartpolicy kontejneru?

3) jak vypada dockerbootstrapscript.sh? co se predava v %i?

4) proc kontejnery bezi v popredi?

5) co presne dela Restart=on-failure dle manualu?

6) co je v logu dockeru/systemd? doporucim zapnout --debug pro docker

7) zkusil bych upstream docker
2.7.2017 22:26 v
Rozbalit Rozbalit vše Re: Docker kontejnery se korektně nevypnou při rebootu
  1. PID 1 je vlastní služba.
  2. Nerestartovat.
  3. Předává automaticky nějaké proměnné a spouští docker run. Parametr určuje část názvu kontejneru.
  4. Je možné je spravovat přes systemd unitu a získávat návratové kódy.
  5. Mimo další pokud běžící aplikace skončí chybou, restartuje to.
  6. Debug zkusím zapnout. Jinak v logu nic zajímavého není. V logu je jen, že to běží a pak nic.
  7. Upstream docker je nepřípustný - není distribuován oficiálně Redhatem.
Jinak podobnou konfiguraci jsem zkoušel na CentOSu (tam mám tedy nejnovější docker) a to se chová korektně. Pochybuji, že příčina bude uvnitř kontejnerů, když "systemctl stop docker" proběhne bez problému.Spíš si myslím, že během shutdownu systém odřízne docker enginu něco, co potřebuje pro ukončení - LVM storage, journal ... Dá se nějak nasimulovat shutdown sekvence pro systemd?
3.7.2017 07:22 1john2 | skóre: 35 | blog: jo12hn | zlín, brno
Rozbalit Rozbalit vše Re: Docker kontejnery se korektně nevypnou při rebootu
ja osobne mam v kontejnerech systemd take a ovladam jim sluzby uvnitr, nicmene je to vyvojove prostredi a tohle je rychlejsi, jednodussi a pohodlnejsi pri vyvoji(netreba znovu otevirat spojeni do kontejneru/editovane konfiguraky). Bylo by zajimave zkusit dat dovnitr jakykoliv jednoduchy init a ukoncit sluzbu a kontejner zevnitr.

Ja osobne se obavam bugu v dockeru, vyviji se dost zbesile a nevypocitatelne.

Co konfigurace vlastniho dockeru ze strany systemd(storage driver/network)?

Proveril bych, v ktere casti shutdown procesu jsou vypinany kontejnery, myslenka s tim ze kontejnery rijdou o storage/sit zni dobre. Systemd je schopen zamrznout kvuli spatne napsane unite pro network mount, u ktere se zapomene na to, ze to neni local fs, tj: systemd ho zacne odpojovat az po odpojeni site.

Jak vypada porovnani konfigurace systemd/dockeru na centosu/rhelu?

Jak se chova stejny docker na centosu?

Nevypadne neco zajimaveho pri porovnani "docker info" z obou systemu?

Jak vypada entrypoint/cmd kontejneru? Mozna by stalo za zkousku soupnout do nej neco jako ['/bin/sleep', 'infinity', '&&', 'bash', '-c'] a samotnou sluzbu poustet jako parametr kontejneru. Detaily pouziti cmd/entrypoint viz referencka od dockeru, pripadne poradim.
3.7.2017 11:08 v
Rozbalit Rozbalit vše Re: Docker kontejnery se korektně nevypnou při rebootu
Vyřešeno workaroundem. Jde o nějaký RHEL plugin do dockeru - bude reportováno jako bug Redhatu.
3.7.2017 13:30 1john2 | skóre: 35 | blog: jo12hn | zlín, brno
Rozbalit Rozbalit vše Re: Docker kontejnery se korektně nevypnou při rebootu
poprosim o link, kdybych na to nahodou narazil znova :)
4.7.2017 13:53 v
Rozbalit Rozbalit vše Re: Docker kontejnery se korektně nevypnou při rebootu
Zkusím sem dát. Nebudu to ale zadávat přímo já. Jinak jedná se o rhel-push-plugin.
3.7.2017 14:00 Petr
Rozbalit Rozbalit vše Re: Docker kontejnery se korektně nevypnou při rebootu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Víte o tom, že Docker umí kontejnery restartovat (po rebootu) sám, že jo? :)
4.7.2017 13:51 v
Rozbalit Rozbalit vše Re: Docker kontejnery se korektně nevypnou při rebootu
Tím člověk nevyřeší úpravu konfigurace, dependency a také to zrovna ne vždy (spíš docela často) funguje na 100 procent.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.