# Docker-in-Docker (Docker-out-of-Docker) Problémamegoldás Ez a dokumentum összefoglalja a `docker.sock` konténeren belüli elérésével kapcsolatos problémák megoldásait és a jövőbeni teendőket. ## Problémák és Megoldások Két fő probléma merült fel az `n8n` konténer beállítása során, amikor az megpróbált hozzáférni a host Docker szolgáltatásához. ### 1. Probléma: "Permission Denied" Hozzáférés a `docker.sock`-hoz - **Hibaüzenet:** `permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock` - **Ok:** A host rendszer (Fedora) SELinux (Security-Enhanced Linux) biztonsági házirendje alapértelmezetten letiltotta, hogy a konténer hozzáférjen a host `/var/run/docker.sock` fájljához, még akkor is, ha a felhasználói jogosultságok (UID/GID) rendben voltak. - **Megoldás:** A `docker-compose.yml` fájlban a `docker.sock` csatolásához hozzáadtuk a `:Z` kapcsolót. Ez jelzi a Docker-nek, hogy helyesen állítsa be az SELinux kontextust a fájlon, lehetővé téve a konténer számára a privát, megosztás nélküli hozzáférést. **Módosítás a `Dev/n8n/docker-compose.yml` fájlban:** ```diff volumes: - /mnt/c/docker/n8n:/home/node/.n8n - - /var/run/docker.sock:/var/run/docker.sock + - /var/run/docker.sock:/var/run/docker.sock:Z ``` ### 2. Probléma: Érvénytelen Elérési Út (Invalid Volume Specification) - **Hibaüzenet:** `invalid volume specification: 'c:\docker\n8n:/home/node/.n8n:rw'` - **Ok:** A `docker-compose.yml` fájlban Windows-stílusú elérési út (`c:\...`) volt megadva egy volume-hoz. Mivel a parancsok WSL (Windows Subsystem for Linux) környezetben futottak, a Docker nem tudta értelmezni ezt a formátumot. - **Megoldás:** Az elérési utat átírtuk a WSL által is értelmezhető Unix-stílusú formátumra. **Módosítás a `Dev/n8n/docker-compose.yml` fájlban:** ```diff volumes: - - c:\docker\n8n:/home/node/.n8n + - /mnt/c/docker/n8n:/home/node/.n8n - /var/run/docker.sock:/var/run/docker.sock:Z ``` ## Hasznos Parancsok - **Konfiguráció érvényesítése:** A `docker-compose.yml` módosítása után a konténert újra kell építeni és indítani ezzel a paranccsal (a megfelelő könyvtárban futtatva): ```bash docker-compose up -d --force-recreate ``` - **Docker Csoportazonosító (GID) lekérdezése:** Hibakereséshez hasznos lehet lekérdezni a `docker.sock` csoportazonosítóját a host rendszeren: ```bash stat -c '%g' /var/run/docker.sock ``` ## Mire Figyelj a Jövőben 1. **SELinux Környezet:** Ha Fedora, CentOS, RHEL vagy más SELinux-ot használó rendszeren dolgozol, és egy konténernek host fájlrendszer erőforráshoz (pl. socket) kell hozzáférnie, szinte mindig szükség lesz a `:z` (megosztott) vagy `:Z` (privát) kapcsolóra a volume csatolásánál. 2. **Elérési Utak WSL-ben:** Amikor WSL-ben használsz Dockert, a `docker-compose.yml` vagy `docker run` parancsokban mindig Unix-stílusú elérési utakat használj (`/mnt/c/...` formátumban), még akkor is, ha Windows fájlokra hivatkozol. 3. **Jogosultságok:** Mindig győződj meg róla, hogy a konténerben futó folyamat felhasználójának (UID) és csoportjának (GID) van-e joga elérni a host-on lévő erőforrást. Ezt a `docker-compose.yml`-ben a `user: :` vagy a `group_add` direktívákkal lehet kezelni.