Docker container / umožnění či autostart ssh

Docker container / umožnění či autostart ssh
« kdy: 01. 11. 2024, 23:51:34 »
Netušíte prosím někdo, jak uvnitř běžícího kontejneru (debian/ubuntu) umožnit autostart ssh? Ssh spustím pomocí service ssh start, ale samozřejmě po restartu je to zase vypnutý a příkaz systemctrl enable "cokoli" v kontejneru není dostupný.

Celá aplikace se skládá ze 3 kontejnerů (sql, cache a hlavní aplikace) a k sestavení používám používám docker-compose.yml.

Ať googlím jak chci, (entrypoint, command... ty mi to pro "radost" pouštějí při startu stále dokola a kontejner se pořád restartuje :-)) nedokážu docílit něco jako "systemctrl enable sshd" aby to zůstalo perzistentní.

Děkuji!


SR

Re:Docker container / umožnění či autostart ssh
« Odpověď #1 kdy: Dnes v 04:57:17 »
Problém/vyhoda kontejnerů je že tam by default bezi Jen jeden proces. Takže co potřebuješ je aby ten jeden proces pustil další procesy

Asi nejjednodušší řešení je si do kontejnerů nainstalovat supervisord napsat si entrypoint kterej pustí ten supervisord a přes supervisord už si můžeš pustit kolik dalších věcí potřebuješ (třeba i to ssh) je to jednoduché elegantní...

Trochu nevýhoda je že ten supervisord sám žere asi 30mb RAM což je prd ale když chceš mít úsporné kontejnerů tak se bez něj jde obejít prostě ten ssh sever pustíš v entrypointu ale pustíš ho na pozadí abys pak mohl nahodit další službu. Není tak elegantní protože ten supervisord za tebe dělá i další práci (automaticky restart padnute servisi...)  což si jinak budeš muset v tom entrypointu nak pořešit sám (a nebo se na to vykašlat ono ssh zas tak často nepadne)

Re:Docker container / umožnění či autostart ssh
« Odpověď #2 kdy: Dnes v 06:14:06 »
Problém/vyhoda kontejnerů je že tam by default bezi Jen jeden proces. Takže co potřebuješ je aby ten jeden proces pustil další procesy

Asi nejjednodušší řešení je si do kontejnerů nainstalovat supervisord napsat si entrypoint kterej pustí ten supervisord a přes supervisord už si můžeš pustit kolik dalších věcí potřebuješ (třeba i to ssh) je to jednoduché elegantní...

Trochu nevýhoda je že ten supervisord sám žere asi 30mb RAM což je prd ale když chceš mít úsporné kontejnerů tak se bez něj jde obejít prostě ten ssh sever pustíš v entrypointu ale pustíš ho na pozadí abys pak mohl nahodit další službu. Není tak elegantní protože ten supervisord za tebe dělá i další práci (automaticky restart padnute servisi...)  což si jinak budeš muset v tom entrypointu nak pořešit sám (a nebo se na to vykašlat ono ssh zas tak často nepadne)

Moc děkuji za radu! Mohl bych tě poprosit o příklad souboru docker-compose.yml? Kam vložit ten supervisord a jak spoustit třeba ten "service ssh start"?

Re:Docker container / umožnění či autostart ssh
« Odpověď #3 kdy: Dnes v 07:31:31 »
Spis je na snadne otazka co vlastne resis. Mam trochu pocit, ze se snazis naroubovat neco z tradicniho OS pristupu na kontejnery. Pak z toho vznikaji ty multiprocesovy kockopsi. Co pres to SSH potrebujes resit?

Re:Docker container / umožnění či autostart ssh
« Odpověď #4 kdy: Dnes v 07:40:26 »
Nainstaloval jsem supervisor do kontejneru, upravil conf. soubor a v kontejneru to běží... Nicméně jsem zase na začátku a prostě nemůžu nikde najít, jak v souboru docker-compose.yml zadat entrypoint, který spustí ten supervisor (něco jako supervisord -c supervisord.conf).

To ssh tam potřebuju kvůli backupu dat rsyncem mimo kontejner.


SR

Re:Docker container / umožnění či autostart ssh
« Odpověď #5 kdy: Dnes v 07:58:12 »
No dve veci
1) pokud chces menit editovat entrypoint je mnohem lepsi sahnout primo do Dockerfile zmenit to tam a zbuildit si upraveny image..

2) jak uz tu padlo velmi casto je to znamka spatneho navrhu pokud tu resis backup tak od toho tu slouzi spis
Volumes.. namountujes si do kontejneru slozku a backupovat muzes z hosta alternativne pokud to nechces resit na hostu tak muzes ten volume namountovat do druheho kontejneru kde pobezi prave JENOM ssh.  a budes to zalohovat "z boku"

je to mnohem cistejsi reseni. Ale tak nebo tak pristup pres Volume je mnohem cistejsi protoze tim davas na prvni dobrou najevo ktere slozky maji byt persistentni.. oddelis tak bezstavovy kontejner (a ano kontjener CHCES mit bezstavovy) od stavovych dat..

Re:Docker container / umožnění či autostart ssh
« Odpověď #6 kdy: Dnes v 08:15:51 »
No dve veci
1) pokud chces menit editovat entrypoint je mnohem lepsi sahnout primo do Dockerfile zmenit to tam a zbuildit si upraveny image..

2) jak uz tu padlo velmi casto je to znamka spatneho navrhu pokud tu resis backup tak od toho tu slouzi spis
Volumes.. namountujes si do kontejneru slozku a backupovat muzes z hosta alternativne pokud to nechces resit na hostu tak muzes ten volume namountovat do druheho kontejneru kde pobezi prave JENOM ssh.  a budes to zalohovat "z boku"

je to mnohem cistejsi reseni. Ale tak nebo tak pristup pres Volume je mnohem cistejsi protoze tim davas na prvni dobrou najevo ktere slozky maji byt persistentni.. oddelis tak bezstavovy kontejner (a ano kontjener CHCES mit bezstavovy) od stavovych dat..

Díky, ale jak píšeš to prostě nelze realizovat. Protože ta aplikace (Seafile) používá nějaký filesystem jako Git a já prostě potřebuju odzálohovat normální adresářovou strukturu. Takže v kontejneru se musí použít fuse mount filesystem-ala-git /nějaký cílový adresár a pak jsou vidět normálně adresáře a soubory.

Umím spustit zadat v docker-compose.yml příkaz - třeba command: sh -c "echo "baeldung" && echo "docker" ", ale problém je v tom, že když to celej ten stack (3 kontejnerů vytvoří), tak to spouští pořád dokola ten kontejner co obsahuje command . Já potřebuju aby se ten příkaz spustil jen jednou po startu kontejneru a ten běžel stejně dál, jako beží když ten command výše v docker-compose.yml vůbec nemám...


SR

Re:Docker container / umožnění či autostart ssh
« Odpověď #7 kdy: Dnes v 08:24:03 »
Urcite to realizovat jde :) i primo u nich na foru jsou na to navody ukazky pokud ty data jsou na disku tak to proste z definice jit musi.

Trochu se desim ze si rozbehavas reseni ala seafile kde bych potencialne chtel mit data o ktere NECHCI prijit a plaves v zakladech.

Ten kontejner se ti otaci protoze kontejner NENI VMka.. tim ze tam das command tak on pusti kontejner a pusti command ten command je "init" podobne jako kdyz poustis distro tak prvni proces je "init" (proces s id 1) a vsechny ostatni procesy jsou jeho potomci. Ve chvili kdy skonci / umre INIT tak konci vsechno.

Tzn pokud sis jako command dal "echo whatever" tak ten echo je "init" a ve chvili kdy skonci tak skonci cely kontejner protoze tam proste nema co bezet. musis si napsat vlastni shell skrtip / nainstalovat tam supervisord (pres Dockerfile)
tohle v docker-compose delat nechces (ne ze by to neslo ale bude to zlo budes se skrabat pres 3 ramena a nemam moc jak ti poradit).

Re:Docker container / umožnění či autostart ssh
« Odpověď #8 kdy: Dnes v 08:49:28 »
Urcite to realizovat jde :) i primo u nich na foru jsou na to navody ukazky pokud ty data jsou na disku tak to proste z definice jit musi.

Trochu se desim ze si rozbehavas reseni ala seafile kde bych potencialne chtel mit data o ktere NECHCI prijit a plaves v zakladech.

Ten kontejner se ti otaci protoze kontejner NENI VMka.. tim ze tam das command tak on pusti kontejner a pusti command ten command je "init" podobne jako kdyz poustis distro tak prvni proces je "init" (proces s id 1) a vsechny ostatni procesy jsou jeho potomci. Ve chvili kdy skonci / umre INIT tak konci vsechno.

Tzn pokud sis jako command dal "echo whatever" tak ten echo je "init" a ve chvili kdy skonci tak skonci cely kontejner protoze tam proste nema co bezet. musis si napsat vlastni shell skrtip / nainstalovat tam supervisord (pres Dockerfile)
tohle v docker-compose delat nechces (ne ze by to neslo ale bude to zlo budes se skrabat pres 3 ramena a nemam moc jak ti poradit).

Tak jasně, že to jde z hosta, třeba pomocí rclone, což je ještě větší opruz než toto a musí se to dělat po jednotlivých uživatelích. Jinak o naše data fakt starosti mít nemusíš, víme jak zálohovat, nikdy jsme o data nepřišli ani po ransomware ani selhání hw/disků.

Fascinuje mě, jak na jednoduchý dotaz "jak nastartovat ssh" po spuštění cont. vznikne mnoho textu, ale ani jeden řádek, který bych vložil do docker-compose.yml (ať už rovnou command nebo script z připojeného volume), který by vyřešil požadované.

Ano, tohle neumím a proto se na to ptám. Samozřejmě můžu celou aplikaci Seafile nainstalovat do VM, ale to jaksi není práce na 2min, jako při použití kontejneru (což je i preferovaný způsob instalace developera tohoto sw).

Tím supervisorem to určitě taky jde, nicméně i ten supervisor je třeba nějak spustit (nejspíš stejně jako by se spouštělo to shh či nějaký jiný script).

Takže ještě jednou prosím někoho kdo to ví, jestli poradí. Myslím, že takováhle prkotina musí jít levou zadní. A myslím, že asi nebudu jediný, komu se to může hodit, aby ssh bylo nastartované i po restartu kontejneru.



SR

Re:Docker container / umožnění či autostart ssh
« Odpověď #9 kdy: Dnes v 09:17:38 »
Ono totiz to co chces jednoduse NEJDE takze JEDNODUCHOU odpoved tu proste nedostanes.. nekolikrat jsem ti tu rekl ze aby jsi toho dosahl musis editovat Dockerfile a upravit si entrypoint. Ted bych ocekaval ze se podivas na to jak se edituje Dockerfile co je to vlastne ten entrypoint jak se s nim pracuje.. a budes mit pripadne dalsi otazky. Jestli cekas ze to za tebe cele napisu tak promin mam sve prace dost.

Druha vec je ze to co delas proste neni spravne a driv nebo pozdeji se ti to vymsti. Priznavas ze jsi v tom zacatecnik a chtel bys poradit ale kdyz ti rikame takto to neni dobre tak nam vysvetlujes ze presne takle je to spravne.. ok pak ses v tom ale sam.

Re:Docker container / umožnění či autostart ssh
« Odpověď #10 kdy: Dnes v 09:34:29 »
Ono totiz to co chces jednoduse NEJDE takze JEDNODUCHOU odpoved tu proste nedostanes.. nekolikrat jsem ti tu rekl ze aby jsi toho dosahl musis editovat Dockerfile a upravit si entrypoint. Ted bych ocekaval ze se podivas na to jak se edituje Dockerfile co je to vlastne ten entrypoint jak se s nim pracuje.. a budes mit pripadne dalsi otazky. Jestli cekas ze to za tebe cele napisu tak promin mam sve prace dost.

Druha vec je ze to co delas proste neni spravne a driv nebo pozdeji se ti to vymsti. Priznavas ze jsi v tom zacatecnik a chtel bys poradit ale kdyz ti rikame takto to neni dobre tak nam vysvetlujes ze presne takle je to spravne.. ok pak ses v tom ale sam.

No a já ti zase říkám, že to jde... Entrypoint jde specifikovat i v docker-compose.yml. Jen já to neumím či někde dělám nějakou syntax chybu. A ty to evidentně neumíš taky, ale jinak jsi profík :-)

A mám fakt strašně nahnáno, jak se mi to vymstí, že budu mít připravenej ssh přístup po startu cont. :-))))

Tak se věnuj své důležité práci a neobtěžuj se vypisováním hovadin :-) On mi poradí třeba nějakej skutečnej profík nebo holt dogooglím.

Re:Docker container / umožnění či autostart ssh
« Odpověď #11 kdy: Dnes v 09:50:42 »
Ať už při vytváření image nebo při startu kontejneru můžete určit, co se má spustit. A to něco může být klidně skript, který vám nastartuje více procesů.

Ale takový postup je špatně. V kontejneru má běžet jenom jedna služba. Pomocí SSH se nemáte připojovat do kontejneru se službou, ale na hosta, odkud se připojíte do kontejneru.

On mi poradí třeba nějakej skutečnej profík nebo holt dogooglím.
Profíci vám tu radí. ALe pokud si myslíte, že to víte líp, než oni, nechápu, proč se tu ptáte. To, že se vám nelíbí rada, která je správná, není problém té rady.

SR

Re:Docker container / umožnění či autostart ssh
« Odpověď #12 kdy: Dnes v 09:54:11 »
Problem toho pristupu ale vubec neni v bezpecnosti a v tom ze tam pobezi SSH to je prave to co nechapes..
Problem je to ze kdyz sahnes do entrypointu tak uz celkem dost sahas nastaveni kontejneru jako takoveho autor ho ma odladeny otestovany a dela tam spoustu veci kterym ON rozumi a ktere tam musi z nakeho duvodu byt.
Ve chvili kdy ten entrypoint prepises tak menis inicializacy celeho toho udelatoru co tam startuje muze to fungovat / nemusi. To samo o sobe jeste problem neni na to prijdes opravi se to a nak to pobezi ale pak autor vyda novou verzi image kde neco zmeni prida tam nake nastaveni ty to pouzijes a ono to v tom lepsim pripade nenabehne. V tom horsim pripade to nabehne ale vlivem toho ze jsi tomu sahnul do initu se bude dit naka velmi nepekna vec na kterou prijdes treba az za pul roku a udela tvuj den nestastnym..

Pripadne prijde naky kolega ktery ma o chlup vetsi znalosti nez ty a bude cekat ze je to vyresene tak jak je to spravne jak se to delat ma tim ze mu narusis tenhle predpoklad mu taky zpusobis nepekne chvilky.

Nerikam ze to nejde ale prave proto ze se v tom tolik neorientujes bych se tuplem drzel doporuceni. To co chces sice jde parkrat jsem to pouzil ale vzdy jako krajni moznost (a vetsinou se mi to dlouhodobe vymstilo prave na maintanance cost).

Re:Docker container / umožnění či autostart ssh
« Odpověď #13 kdy: Dnes v 10:16:04 »
Ať už při vytváření image nebo při startu kontejneru můžete určit, co se má spustit. A to něco může být klidně skript, který vám nastartuje více procesů.

Ale takový postup je špatně. V kontejneru má běžet jenom jedna služba. Pomocí SSH se nemáte připojovat do kontejneru se službou, ale na hosta, odkud se připojíte do kontejneru.

On mi poradí třeba nějakej skutečnej profík nebo holt dogooglím.
Profíci vám tu radí. ALe pokud si myslíte, že to víte líp, než oni, nechápu, proč se tu ptáte. To, že se vám nelíbí rada, která je správná, není problém té rady.

Pane Jirsáku, vás třeba jako profíka beru. A chápu, že to není asi best practice to co chci:-) Ale...

Když nejdřív "někdo" poradí Supervisor, ale neřekne jak ho vlastně spustit, tak se dostáváme opět na začátek, že. A to fakt profi není nehledě na to, že to stejně není best practice evidentně tak jako tak v případě kontejnerů.

Ale dobrá, už to mám vyřešené, spuštění ssh přidané do entrypoint scriptu. Ssh po restartu kont. jde.

Nicméně by mě stejně zajímalo, jak by se to vyřešilo lépe a správně, když podmínky jsou takovéto:

1) Seafile sw má spec. filesystém, je třeba uvnitř kontejneru stejně spusti fuse mount, aby byla vidět normální adresářová/souborová struktura

2) Zkoušel jsem i fuse mount do adresáře hosta. Mount proběhne v pořádku, ale na hostu soubory v daném adresáři vidět nejsou

3) Z důvodu 2 jsem přistoupil na pravidelné odzálohování (či spíše vykopírování) fuse mount složky pomocí rsync/ssh. Zálohy samotné jsou řešeny několika Proxmox Backup Servery.

4) Fakt si neumím představit, že Seafile se po..... ať už hw nebo sw nebo ransomware a někdo chce obnovit jenom určité soubory. To je fakt peklo bez klasické adr. struktury. Ale zase ten jejich FS je super na synchronizaci a je to třeba násobně rychlejší než Nextcloud.

Jestli existuje jednodušší/lepší řešení/spolehlivější(v čem?), klidně to předělám...