docker-composeは、VMware Workstationのubuntu 22.04.3で所有権を変更することはできません。

docker-composeは、VMware Workstationのubuntu 22.04.3で所有権を変更することはできません。

VMwareワークステーション:16.2.5/17.0.2

Ubuntu:20.04.6/22.04.3

ドッカーファイル:

FROM debian:12.1-slim

WORKDIR /root

RUN groupadd -f ernie-1001 -g 1001 \
    && groupadd -f ernie-1000 -g 1000 \
    && useradd -ms /bin/bash ernie -g 1001 -G 1000 \
    && printf "ernie:ernie" | chpasswd \
    && adduser ernie sudo \
    && printf "ernie ALL= NOPASSWD: ALL\\n" >> /etc/sudoers

Ubuntu 22.04.3 を新規インストールすると、次の一連のコマンドを実行し、次のような出力が出ると予想します。

$ sudo apt install docker-compose
$ sudo docker build . -t strange:1.0
$ sudo docker run -it --name strangebase strange:1.0
root@d031fe5152e4:~# su ernie
ernie@d031fe5152e4:/root$ cd
ernie@d031fe5152e4:~$ ls -all
total 20
drwxr-xr-x 2 ernie ernie-1001 4096 Aug 19 04:16 .
drwxr-xr-x 1 root  root       4096 Aug 19 04:16 ..
-rw-r--r-- 1 ernie ernie-1001  220 Apr 23 21:23 .bash_logout
-rw-r--r-- 1 ernie ernie-1001 3526 Apr 23 21:23 .bashrc
-rw-r--r-- 1 ernie ernie-1001  807 Apr 23 21:23 .profile
ernie@d031fe5152e4:~$

私たちが得るものは:

$ sudo apt install docker-compose
$ sudo docker build . -t strange:1.0
$ sudo docker run -it --name strangebase strange:1.0
root@d031fe5152e4:~# su ernie
ernie@d031fe5152e4:/root$ cd
ernie@d031fe5152e4:~$ ls -all
total 20
drwxr-xr-x 2 root  root 4096 Aug 19 04:16 .
drwxr-xr-x 1 root  root       4096 Aug 19 04:16 ..
-rw-r--r-- 1 root  root  220 Apr 23 21:23 .bash_logout
-rw-r--r-- 1 root  root 3526 Apr 23 21:23 .bashrc
-rw-r--r-- 1 root  root  807 Apr 23 21:23 .profile
ernie@d031fe5152e4:~$

何らかの理由で、Ernieのホームディレクトリ(例:/ home / ernie)はまだernieの所有ですがroot、そうではありません。そうですか?

複数のコンピュータで試してみましたが、同じ結果が出ました。奇妙なことに、以前にインストールされたubuntu_22.04 VMは期待どおりに機能しました。

RUN chown -R ernie:ernie /home/ernieまた、良い測定のためにDockerfileに入れてみましたが、役に立ちませんでした。

私がここで何か間違っているのでしょうか?最近似たようなことを経験した人はいますか?

ありがとうございます。

答え1

dockerエクスポートコマンドで生成されたtarアーカイブに、所有権情報が欠落している特定のバグがあるようです(すべてのファイルはルートの所有です。)。その後、このアーカイブを使用して権限のないプロセスのファイルシステムを再作成すると(docker importや解凍、chrootingなど)、権限拒否エラーなどが原因で失敗する可能性があります。

このエラーは、Go 1.19より前のバージョンでパッケージをビルドしたときに発生します。このGoバージョンでは、UNIX関連の属性をアーカイブに追加する必要があるかどうかを判断するために、アップストリームで使用されるunixビルドタグが導入されました。以前のGoバージョンでは、このソースコードは自動的に無視されるため、tarアーカイブにUIDとGIDがありません。

https://bugs.launchpad.net/ubuntu/+source/docker.io-app/+bug/2029523

関連情報