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.