Como faço para montar um volume no docker para que os arquivos não sejam propriedade do root?

Como faço para montar um volume no docker para que os arquivos não sejam propriedade do root?

Eu tenho um diretório no meu computador Linux (Ubuntu 23.10) chamado:

/home/steve/foobar/foo

O diretório e todos os arquivos nele contidos pertencem ao usuário steve (uid 1000) e ao grupo steve (gid 1000).

Quero montá-lo dentro do docker como /host/foo

Não importa o que eu tente, todos os arquivos dentro do docker acabam sendo propriedade do root com o grupo root. Quero que eles sejam propriedade do usuário Steve e do grupo Steve.

Aqui está compose.yaml:

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

 

E aqui está meu 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

Para construir eu faço:

docker compose build

Para correr eu faço:

docker compose run

E para obter uma linha de comando dentro do docker eu faço:

docker exec -it pytest1 /bin/bash    

Que mudanças exatas devo fazer para que todos os arquivos em /host/foo sejam de propriedade de Steve com um grupo de Steve?

Obrigado.

(Se for importante, também estou executando o docker desktop).

Responder1

Você precisa adicionar o seguinte ao seu docker-compose

user: "1000:1000"

Então no seu caso

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

informação relacionada