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).