Как смонтировать том в Docker, чтобы файлы не принадлежали пользователю root?

Как смонтировать том в Docker, чтобы файлы не принадлежали пользователю root?

У меня на компьютере Linux (Ubuntu 23.10) есть каталог, который называется:

/home/steve/foobar/foo

Каталог и все файлы в нем принадлежат пользователю steve (uid 1000) и группе steve (gid 1000).

Я хочу смонтировать его внутри Docker как /host/foo

Что бы я ни пытался, все файлы внутри docker в конечном итоге принадлежат пользователю root с группой root. Я хочу, чтобы они принадлежали пользователю steve и группе steve.

Вот файл compose.yaml:

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

 

А вот мой 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

Для сборки я делаю:

docker compose build

Чтобы бегать, я делаю:

docker compose run

А чтобы получить командную строку внутри Docker, я делаю:

docker exec -it pytest1 /bin/bash    

Какие именно изменения мне нужно сделать, чтобы все файлы в /host/foo принадлежали Стиву и группе Стив?

Спасибо.

(Если это имеет значение, я также использую docker desktop).

решение1

Вам необходимо добавить следующее в ваш docker-compose

user: "1000:1000"

Так что в вашем случае

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

Связанный контент