alapvetoen a systemd nem fog elindulni a containeren belul ket okbol:
1. Neki kell lennie a PID1 -nek, de ehhez systemd-vel kell bootolni a rendszert, azaz az /sbin/init kell az entrypointba (kulonben: "System has not been booted with systemd as init system (PID 1)" meg "Host is down")
2. A fentivel meg mindig nem fog mukodni, mert a systemd-nek szuksege can a sysfs-en levo cgroups-ra, azaz bele kellene mountolni a containerbe. Ha ezt rw-ben teszed mar el is van baszva a hostod, szoval legyen inkabb ro-ban mountolva
3. A fentiekhez persze kell, hogy az egesz hobelebanc privileged modban fusson, ami egy kb tokonszuras security szempontbol
Ha mindezek mellett meg mindig kotod az ebet a karohoz, hat rajta :D
Ha kezzel akarod inditani akkor arra ott a "mysqld" parancs amivel a systemd is inditja. De egy containeren belul kurva sok mindennek ott kell lennie hozza, amit mondjuk az official mysqld image megcsinal neked (csak nezz ra a github-jara, nem szarral gurigaznak)
En multkor egy custom nginx-kontenerrel szenvedtem vegig kb. ugyanezt, ott egy sima `nginx -g daemon off;` megoldotta. Mysqld nem tud hasonlot, systemd nelkul?
A fedora image nem tudom milyen, a redhat-ubiba egyébként bele van gyógyítva a systemd. Nem tudom, mennyire jajj, nyilván azért csinálták, hogy a legacyt könnyen lehessen konténerbe tenni. De rémlik, hogy egy darabig a systemdnél is ment a matek, hogy ez azért usecase, lehet, hogy nem kő undor ma már
annyi az egesz, hogy antipattern. A kontenerizacio lenyege hogy izolalva futtassunk egyetlen process-t bezarva a sajat vilagaba (namespaces) adott erofirrasokat engedejezve neki (cgroups) es capability-ket. Egyet. Ha mgedoglik az a jo, nem akarjuk hogy ujrainduljon (bar mar ugy ez is lehetseges)
Mit irtam is. A docker es tarsai "ugyanazt" csinalja, mint a systemd. Kihasit cgroup-ot, namespace-be tesz, es felugyeli a container process-t ha kell. Semmi ertelme egy container-nek amiben 30 darab szerviz fut es ha megdoglenek, akkor majd a systemd mindegyiket ujrainditgatja. Ezzel el is jutottunk a virtualizaciohoz. De ha meg ekkora mennyisegu process-t kell futtatgatni, akkor sem celszeru egyetelen konteiner-be belepakolni mindent, szoval akkor meg ott a dockercompose, swarm, k8s, etc. Hogy megint csak egyetelen process-t futtassunk foreground-ban egyetlen containerkent, de abbol szamosat.
Nem "ko undor"-rol van szo, hanem hogy olyan, mintha autoval akarnal kenyeret megvajazni. Lehet persze :D
Régi melóhelyemen ősrégi fedora alatt futott az ősrégi legacy mysql.
A fejlesztői környezetekhez abban raktam össze mindent, a legrégebben fellelhető dockeres fedora-ban raktam össze én is amit lehetett. Szerencsére végül sikerült átállni 8-asra és utána már nem kellett.
Szóval ez pl lehet indok.
Kérdezőnek:
Viszont a kérdés itt nem az ,hogy dockerben hogy lehet elindítani, hanem az, hogy fedora alatt hogy lehet, annak kell utánanézni. Google alatt valszeg fél perc. Nekem nincs hozzá kedvem.
ugye itt az a baj, hogy a docker egyetlen process-t indit foreground, azaz ha az kell, hogy egy process supervisor inditsa a docker helyett, akkor bezony azt be kell konfigolni, meg gondozni is kell. De az egesz ott szarodik el, hogy ennek semmi ertelme. Egy container egy process. Nincs init, nincs process provisioning (jo, lehet supervisrod vagy akar systemd is). De mondom, semmi ertelme systemd-t inditani egy containerben, hogy elinditson egy process-t es esetleg ujra-es-ujra inditgassa ha az szar. Akkor bezony annak meg kell doglenie ha baja van.
Amugy a podman tamogatja a systemd-t (de megint csak minek is?). A systemd cgroup-ol, namespace-el es elindit egy process-t, he varj, ugyanezt csinalja a docker is vagy a podman. :D
Amubgy Fedora-n ugyanugy indul mint mindenhol mashol, systemd start mysql.service :D
A kerdes itt arra vonatkozott hogy inditja el a containeren belul a myslq-t. Itt aztan bedobtak a systemd-t ami nem jo otlet. Lehet talpasan is elinditani (man mysqld), de kurvara sok mindent kell meg ballitani utana ha hasznalni is akarja. Ezt oldana meg az official mysql image. Ha nagyon akarja akkor az elejere odavagja a fedora image-et FROM-ba es atirja az osszes shell scriptet meg minden istennyilat fedorasra. De minek, az istenert minek????!!!?!?!?!?!
Nekem közben felugrott pár emlék régebbről pont amikor még fedora alatt dockereztem régi mysql-el, hogy számított az is, hogy hogyan mountolom az adatokat. Pl a full mysql-es data könyvtárat nem lehetett felmountolni mert oda akarta tenni a process fájlokat vagy mit és azt nem bírta. Így a cnf-ben külön át kellett írni, hogy hol van a data mappa és azt lehetett mountolni.
Nem tudom, hogy nálad ilyen gond van e, ha mountolsz, akkor kezdetnek kommenteld vagy vágd ki az összes mount pontot és próbáld úgy, hogy mi történik.
Amugy az operation not permitted helye es ideje elegge beszedes szokott lenni a logokban. Az egyik dolgo lehet ugye, hogy a container egy bizonyos user ID-val fut, vagy a benne levo process, ami aztan hozza aakr ferni mondjuk a mlountolt volume-hoz amit viszont a host jogosultsagi rendszere megfog (megoldas az ACL). Aztan lehet az is ugye, hogy a mysql process fut a 1000-es UID-el es letre akarja hozni a db-t a container filerendszereben, de ugye ott mindent a UID XXXX (fasz se tudja) birtokol. Es akkor meg ezer masik dolgot nem is emlitettunk, mint peldaul a socket letrahozasat (unix vagy tcp? es ha TCP mapped port tuti hasznalhato neki? stb stb)
A fenti hibak mindegyike siman megoldhato ha tudod miert irja ki az opertaion not permitted-et
Azert egy operation not permitted-hez meg nem kell strace :D
Valoszinuleg filerendszer jogosultsagi problemaja van a mysqld-nek a kontaineren belul. Szerintem meg kellene neznie milyen userrel fut a container es milyen user-rel akar futni a mysql service (meg megnezni hogy a my.cnf-ben hol van a data dir). Meg ha mountolt volume akkor azon hogyan allnak a jogosultsagok a host-on.
Az operation not permitted tipikusan a db letrahozasa/inicializalasa vagy a socket krealasakor jon elo, ha nincs meg a jogosultsag
Egyszer majd azt is megirhatnad, hogy miert is ragaszkodtal a fedorahoz egy sima containerben? Mi a benefit, hogy ket napig hajlando voltal veszodni vele, ahelyett hogy csak futtattad volna 10 masodperc alatt.
Hozzászólások
megnézted h a systemd unit mit akar behúzni?
mysqld-t indítja.
Itt valami még kellene előtte.
Sokat segítene a hibaüzenet.
ahogy írtam: "operation not permitted"
alapvetoen a systemd nem fog elindulni a containeren belul ket okbol:
1. Neki kell lennie a PID1 -nek, de ehhez systemd-vel kell bootolni a rendszert, azaz az /sbin/init kell az entrypointba (kulonben: "System has not been booted with systemd as init system (PID 1)" meg "Host is down")
2. A fentivel meg mindig nem fog mukodni, mert a systemd-nek szuksege can a sysfs-en levo cgroups-ra, azaz bele kellene mountolni a containerbe. Ha ezt rw-ben teszed mar el is van baszva a hostod, szoval legyen inkabb ro-ban mountolva
3. A fentiekhez persze kell, hogy az egesz hobelebanc privileged modban fusson, ami egy kb tokonszuras security szempontbol
Ha mindezek mellett meg mindig kotod az ebet a karohoz, hat rajta :D
Ha kezzel akarod inditani akkor arra ott a "mysqld" parancs amivel a systemd is inditja. De egy containeren belul kurva sok mindennek ott kell lennie hozza, amit mondjuk az official mysqld image megcsinal neked (csak nezz ra a github-jara, nem szarral gurigaznak)
En multkor egy custom nginx-kontenerrel szenvedtem vegig kb. ugyanezt, ott egy sima `nginx -g daemon off;` megoldotta. Mysqld nem tud hasonlot, systemd nelkul?
De, hiszen az official imageben is az megy. Azért nem értjük itt páran minek a fedora image ide. Meg a szopás. :)
A fedora image nem tudom milyen, a redhat-ubiba egyébként bele van gyógyítva a systemd. Nem tudom, mennyire jajj, nyilván azért csinálták, hogy a legacyt könnyen lehessen konténerbe tenni. De rémlik, hogy egy darabig a systemdnél is ment a matek, hogy ez azért usecase, lehet, hogy nem kő undor ma már
annyi az egesz, hogy antipattern. A kontenerizacio lenyege hogy izolalva futtassunk egyetlen process-t bezarva a sajat vilagaba (namespaces) adott erofirrasokat engedejezve neki (cgroups) es capability-ket. Egyet. Ha mgedoglik az a jo, nem akarjuk hogy ujrainduljon (bar mar ugy ez is lehetseges)
Mit irtam is. A docker es tarsai "ugyanazt" csinalja, mint a systemd. Kihasit cgroup-ot, namespace-be tesz, es felugyeli a container process-t ha kell. Semmi ertelme egy container-nek amiben 30 darab szerviz fut es ha megdoglenek, akkor majd a systemd mindegyiket ujrainditgatja. Ezzel el is jutottunk a virtualizaciohoz. De ha meg ekkora mennyisegu process-t kell futtatgatni, akkor sem celszeru egyetelen konteiner-be belepakolni mindent, szoval akkor meg ott a dockercompose, swarm, k8s, etc. Hogy megint csak egyetelen process-t futtassunk foreground-ban egyetlen containerkent, de abbol szamosat.
Nem "ko undor"-rol van szo, hanem hogy olyan, mintha autoval akarnal kenyeret megvajazni. Lehet persze :D
Miért akarsz magadnak mysql konténert építeni fedora base image-dzsel?
Miért nem jó a hivatalos mysql konténer?
https://hub.docker.com/_/mysql
Régi melóhelyemen ősrégi fedora alatt futott az ősrégi legacy mysql.
A fejlesztői környezetekhez abban raktam össze mindent, a legrégebben fellelhető dockeres fedora-ban raktam össze én is amit lehetett. Szerencsére végül sikerült átállni 8-asra és utána már nem kellett.
Szóval ez pl lehet indok.
Kérdezőnek:
Viszont a kérdés itt nem az ,hogy dockerben hogy lehet elindítani, hanem az, hogy fedora alatt hogy lehet, annak kell utánanézni. Google alatt valszeg fél perc. Nekem nincs hozzá kedvem.
ugye itt az a baj, hogy a docker egyetlen process-t indit foreground, azaz ha az kell, hogy egy process supervisor inditsa a docker helyett, akkor bezony azt be kell konfigolni, meg gondozni is kell. De az egesz ott szarodik el, hogy ennek semmi ertelme. Egy container egy process. Nincs init, nincs process provisioning (jo, lehet supervisrod vagy akar systemd is). De mondom, semmi ertelme systemd-t inditani egy containerben, hogy elinditson egy process-t es esetleg ujra-es-ujra inditgassa ha az szar. Akkor bezony annak meg kell doglenie ha baja van.
Amugy a podman tamogatja a systemd-t (de megint csak minek is?). A systemd cgroup-ol, namespace-el es elindit egy process-t, he varj, ugyanezt csinalja a docker is vagy a podman. :D
Amubgy Fedora-n ugyanugy indul mint mindenhol mashol, systemd start mysql.service :D
hogy indítod el a konténert?
próbáld:
4 és fél éve csak vim-et használok. elsősorban azért, mert még nem jöttem rá, hogy kell kilépni belőle.
A kerdes itt arra vonatkozott hogy inditja el a containeren belul a myslq-t. Itt aztan bedobtak a systemd-t ami nem jo otlet. Lehet talpasan is elinditani (man mysqld), de kurvara sok mindent kell meg ballitani utana ha hasznalni is akarja. Ezt oldana meg az official mysql image. Ha nagyon akarja akkor az elejere odavagja a fedora image-et FROM-ba es atirja az osszes shell scriptet meg minden istennyilat fedorasra. De minek, az istenert minek????!!!?!?!?!?!
Szerintem arra céloztak, hogy mi van az unit exec sorában. Meg esetleg execpre sorokban. Én legalábbis így értettem.
Tudom, létezik a docker hub-on szinte minden. Engem most ez érdekel, erre van szükségem.
A systemd unit-ban levő dolgokat nézem én is először, de mindenre "operation not permitted" üzenet jön. Pl. a mariadb megy egyébként.
Nekem közben felugrott pár emlék régebbről pont amikor még fedora alatt dockereztem régi mysql-el, hogy számított az is, hogy hogyan mountolom az adatokat. Pl a full mysql-es data könyvtárat nem lehetett felmountolni mert oda akarta tenni a process fájlokat vagy mit és azt nem bírta. Így a cnf-ben külön át kellett írni, hogy hol van a data mappa és azt lehetett mountolni.
Nem tudom, hogy nálad ilyen gond van e, ha mountolsz, akkor kezdetnek kommenteld vagy vágd ki az összes mount pontot és próbáld úgy, hogy mi történik.
ismetlem magam:
1. irany a github es nezd meg az official-t
2. az alapjan ganyold ossze amit szeretnel
Amugy az operation not permitted helye es ideje elegge beszedes szokott lenni a logokban. Az egyik dolgo lehet ugye, hogy a container egy bizonyos user ID-val fut, vagy a benne levo process, ami aztan hozza aakr ferni mondjuk a mlountolt volume-hoz amit viszont a host jogosultsagi rendszere megfog (megoldas az ACL). Aztan lehet az is ugye, hogy a mysql process fut a 1000-es UID-el es letre akarja hozni a db-t a container filerendszereben, de ugye ott mindent a UID XXXX (fasz se tudja) birtokol. Es akkor meg ezer masik dolgot nem is emlitettunk, mint peldaul a socket letrahozasat (unix vagy tcp? es ha TCP mapped port tuti hasznalhato neki? stb stb)
A fenti hibak mindegyike siman megoldhato ha tudod miert irja ki az opertaion not permitted-et
Akkor pl. megpróbálnám strace-el indítani, hátha abból egyértelműbb lesz a bánata.
Azert egy operation not permitted-hez meg nem kell strace :D
Valoszinuleg filerendszer jogosultsagi problemaja van a mysqld-nek a kontaineren belul. Szerintem meg kellene neznie milyen userrel fut a container es milyen user-rel akar futni a mysql service (meg megnezni hogy a my.cnf-ben hol van a data dir). Meg ha mountolt volume akkor azon hogyan allnak a jogosultsagok a host-on.
Az operation not permitted tipikusan a db letrahozasa/inicializalasa vagy a socket krealasakor jon elo, ha nincs meg a jogosultsag
Az vágom, de akkor egyértelmű(bb) lenne, így meg a találgatás megy, meg a systemd hörgés.
nincs systemd az officvial fedora image-ben, lasd lentebb
kb ket perc volt kideriteni mi volt a gond :D
Na kidebuggoltam neki:
Szoval bezony maga a binaris keptelen megcsinalni a dolgokat, de miert is? Mert bezony a containernek nincs meg a capabilitije hozza
Ha "--privileged" akkor meg siman indulna, de bezony ott meg az a baj, hogy root-kent nem akarja futtatni magat :D
Szoval tehat a megoldas hogy a containernek meg kell adni a CAP-et es kesz, de ne inditsuk privileged-del :D
Eleve miért kéne rootként indítani a mysqld-t?
alapvetoen nem kellene, de a privileged arra jo volt hogy lassuk mi a gond. :D
Szoival be kell allitani a CAP-eket es kesz
Köszönöm a segítséget! Elindult:
Persze finomítani lehet rajta. ;)
Egyszer majd azt is megirhatnad, hogy miert is ragaszkodtal a fedorahoz egy sima containerben? Mi a benefit, hogy ket napig hajlando voltal veszodni vele, ahelyett hogy csak futtattad volna 10 masodperc alatt.