Wie mounte ich ein Volume in Docker, sodass die Dateien nicht Root gehören?

Wie mounte ich ein Volume in Docker, sodass die Dateien nicht Root gehören?

Ich habe auf meinem Linux-Computer (Ubuntu 23.10) ein Verzeichnis mit dem Namen:

/home/steve/foobar/foo

Das Verzeichnis und alle darin enthaltenen Dateien sind Eigentum des Benutzers Steve (UID 1000) und der Gruppe Steve (GID 1000).

Ich möchte es im Docker als /host/foo mounten

Egal, was ich versuche, alle Dateien im Docker gehören letztendlich root mit der Gruppe root. Ich möchte, dass sie dem Benutzer Steve und der Gruppe Steve gehören.

Hier ist compose.yaml:

services:
  pyapp:
    hostname: pytest
    container_name: pytest1
    command: 'sleep infinity'
    volumes:
        - /home/steve/foobar/foo:/host/foo
    build:
      dockerfile: testapp.dockerfile

 

Und hier ist meine testapp.dockerfile

FROM ubuntu:jammy

ARG UID=1000
RUN adduser \
    --disabled-password \
    --gecos "" \
    --home "/home/steve" \
    --shell "/bin/bash" \
    --uid "${UID}" \
    steve

RUN mkdir -p /host/foo
RUN chown steve: /host
RUN chown steve: /host/foo

USER steve
VOLUME /host/foo

Zum Bauen mache ich:

docker compose build

Zum Laufen mache ich:

docker compose run

Und um eine Befehlszeile im Docker zu erhalten, gehe ich wie folgt vor:

docker exec -it pytest1 /bin/bash    

Welche genauen Änderungen muss ich vornehmen, damit alle Dateien unter /host/foo Steve und einer Gruppe von Steve gehören?

Danke schön.

(Falls es wichtig ist, ich verwende auch Docker Desktop).

Antwort1

Sie müssen Folgendes zu Ihrem Docker-Compose hinzufügen

user: "1000:1000"

Also in Ihrem Fall

services:
  pyapp:
    hostname: pytest
    container_name: pytest1
    command: 'sleep infinity'
    user: "1000:1000"
    volumes:
        - /home/steve/foobar/foo:/host/foo
    build:
      dockerfile: testapp.dockerfile

verwandte Informationen