エラーが発生したときにログに似たファイルを生成するDockerイメージがあります。バインドマウントを使用してホストに書き込むディレクトリをマウントしました。ところで生成されたファイルはroot
。chown
chgrp
コンテナにファイルの所有者とグループをコンテナを実行しているユーザーの所有者とグループに設定する方法はありますか?
いくつかの文脈で私が作ったおもちゃの例は次のとおりです。
ドッカーファイル
FROM debian
WORKDIR /root
VOLUME /root/output
COPY run.sh /root/
ENTRYPOINT ["./run.sh"]
実行sh
#!/bin/bash
echo hello > output/dump
私の実行コマンドは
docker run -v $PWD/output:/root/output test
答え1
これらのファイルは、コンテナ内で実行されているユーザーによって生成されます。コンテナ化コマンドが実行されると、root
すべてのファイルがルートとして生成されます。
別のユーザーとしてファイルを作成するには、別のユーザーとしてコンテナを実行します。例えば
docker run -v "$(pwd)/output":/root/output -u $(whoami) test
注:コンテナによっては、この機能がデフォルトで機能しない場合があります(たとえば、コンテナ内で特権ポートを開く必要があるか、スクリプトが特定の(スーパー)ユーザーだけにアクセスできるため)。
答え2
これは古い既知のエラー。回避策として使用できますボードマン、Dockerと互換性があり、追加を提案しましたalias docker=podman
。ここでの質問の1つの利点は、Podmanがrootとして実行されるサービスを必要としないことです。セキュリティに良いだけでなく、実際にこのようなミスを防止してくれます。
デモ:
$ ls -l /tmp/hello
ls: cannot access 'hello': No such file or directory
$ podman run --rm -v /tmp/:/mnt/ -it ubuntu:22.04 sh -c "touch /mnt/hello && ls -l /mnt/hello"
-rw-r--r--. 1 root root 0 Sep 26 03:57 /mnt/hello
$ ls -l /tmp/hello
-rw-r--r--. 1 konstantin konstantin 0 сен 26 06:57 hello