# 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: <UID>:<GID>` vagy a `group_add` direktívákkal lehet kezelni.
