Podman volume(?) mount

Fórumok

Üdv,

Fc37-ben egy Dockerfile-ben megadtam:

VOLUME /app

Build megvan, futtatás:

podman run -it -p 8000:8000 --name myapp --hostname myapp fedora:myapp -v $(pwd)/app:/app

# vagy

podman run -it -p 8000:8000 --name myapp --hostname myapp fedora:myapp --mount='type=bind,source=$(pwd)/app,destination=/app'

 A $(pwd)/app nem mountolódik fel a konténer /app könyvtárába. Üres marad. Mit rontok el? Mi lenne a helyes megoldás? https://docs.podman.io/en/latest/markdown/options/mount.html

Hozzászólások

Próbáld meg a teljes path-szel is (csak tipp, nem értek hozzá).

Nem jó azzal sem.

# podman run [OPTIONS]
...

--volume, -v=[[SOURCE-VOLUME|HOST-DIR:]CONTAINER-DIR[:OPTIONS]]
Create a bind mount. If -v /HOST-DIR:/CONTAINER-DIR is specified,
Podman bind mounts /HOST-DIR from the host into /CONTAINER-DIR in the Podman container.
Similarly, -v SOURCE-VOLUME:/CONTAINER-DIR will mount the named volume from the host into the container.
If no such named volume exists, Podman will create one. If no source is given, the volume will be created as an anonymously named volume with a randomly generated name, and will be removed when the container is removed via the --rm flag or the podman rm --volumes command.

Létrehoz egy saját volume-t a /app-nak és a forrás útvonalat nem veszi figyelembe. Miért? Nem egészen értem.

Nekem ugyan 4.3.1 el működni látszik, de néhány ötlet

  • Egyáltalán minek neked a dockerfileba a VOLUME, ha úgyis hostdirt akarsz csatolni?
  • Ha mégis kell, mert mondjuk ott van, akkor nem segít egy --image-volume=ignore ? Lehet, hogy valami sorrendiségi baj van.
  • Jogosultságok jók, selinux, apparmor nem fogja? Bár akkor elvileg nyüsszögni kéne neki, hogy nem jó a dir
  • A pwds izére egyébként a podmannak a doksi alapján nincs szüksége (viszont relative dirhez kell neki ./ az elejére, különben volumenak nézi)

SELinux beállít, nem kikapcsol. Azaz fogod, és megnézed, hogy min akad el, mi az esetleges hasfájása, és helyrerakod, ami gondja van.
Kezded azzal, hogy:
chcon -R system_u:object_container_r:file_t:s0 /a/podman/konténer/alá/felcsatolt/könyvtár/

Utána az auditd-nek kell adni egy USR1 szignált, hogy kirotálja a az audit logot, majd jöhet a konténer indítása, és utána egy audit2why < /var/log/audit/audit.log és annak a kimenetét átnézni, illetve egy audit2allow < /var/log6audit/audit.log kimenetet átgondolni, hogy amit ott javasol, az jó-e, kell-e, vagy néminemű cimkézés kell még.

Ja, a chcon az egyszeri, célszerű a konténerek alá felhúzott könyvtárakat mintaillesztéssel jól lefedhető útvonalakon tartani, és semanage fcontext... satöbbi parancsot használva "ráhúzni" az ilyen útvonalakra a fenti kontextet, hogyha új könyvtár/fájl jön adott útvonalon létre, az is ezt a label-t kapja, valahogy így:
semanage fcontext -a -t container_file_t "/home/(.*/)?kontenerek/alatt(/.*)?"

Utána csak restorecon kell a könyvtárra.

Szerkesztve: 2023. 04. 12., sze – 16:00

nemide

Nem rossz helyen van neked az a `-v`?

⛵ vnagy-eu in /tmp/foobar on ☁️  eu-west-1 
❯ cat Dockerfile 
FROM fedora:latest
VOLUME /app

⛵ vnagy-eu in /tmp/foobar on ☁️  eu-west-1 
❯ ls app/
readme.md

⛵ vnagy-eu in /tmp/foobar on ☁️  eu-west-1 
❯ podman build -f Dockerfile -t fedora:myapp .
STEP 1/2: FROM fedora:latest
STEP 2/2: VOLUME /app
--> Using cache 48e279e17eeba96f6204eb4ce86e8285190bc3ec5f3cf36d2ef917265c383ed8
COMMIT fedora:myapp
--> 48e279e17ee
Successfully tagged localhost/fedora:myapp
48e279e17eeba96f6204eb4ce86e8285190bc3ec5f3cf36d2ef917265c383ed8

⛵ vnagy-eu in /tmp/foobar on ☁️  eu-west-1 
❯ podman run --rm -it -p 8000:8000 --name myapp --hostname myapp fedora:myapp -v $(pwd)/app:/app
Error: crun: executable file `-v` not found in $PATH: No such file or directory: OCI runtime attempted to invoke a command that was not found

⛵ vnagy-eu in /tmp/foobar on ☁️  eu-west-1 
❯ podman run --rm -it -p 8000:8000 --name myapp --hostname myapp -v $(pwd)/app:/app:Z  fedora:myapp
[root@myapp /]# ls /app/
readme.md
[root@myapp /]# exit
exit