ファイルがルートによって所有されないように、Docker でボリュームをマウントするにはどうすればよいですか?

ファイルがルートによって所有されないように、Docker でボリュームをマウントするにはどうすればよいですか?

私の 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 の下にあるすべてのファイルが steve のグループで steve によって所有されるようにするには、具体的にどのような変更を行う必要がありますか?

ありがとう。

(関係があるなら、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

関連情報