Docker 不保留 chown 用户设置

And*_*ete 6 linux docker

我有一个小示例 Dockerfile:

FROM ubuntu:22.04

RUN groupadd -f -g 1000 docker && useradd -ms /bin/bash docker -u 1000 -g 1000 && ls -la /home
RUN chown docker:docker -R /home/docker && ls -la /home
RUN ls -la /home
Run Code Online (Sandbox Code Playgroud)

给出输出:

$ docker build -t tmp .
Sending build context to Docker daemon  2.048kB
Step 1/4 : FROM ubuntu:22.04
 ---> 6b7dfa7e8fdb
Step 2/4 : RUN groupadd -f -g 1000 docker && useradd -ms /bin/bash docker -u 1000 -g 1000 && ls -la /home
 ---> Running in 58bee8aa4dfd
total 12
drwxr-xr-x 1 root   root   4096 Aug 11 15:55 .
drwxr-xr-x 1 root   root   4096 Aug 11 15:55 ..
drwxr-x--- 2 docker docker 4096 Aug 11 15:55 docker
Removing intermediate container 58bee8aa4dfd
 ---> dbd5d16e92d5
Step 3/4 : RUN chown docker:docker -R /home/docker && ls -la /home
 ---> Running in d76701c0765d
total 20
drwxr-xr-x 1 root   root   4096 Aug 11 15:55 .
drwxr-xr-x 1 root   root   4096 Aug 11 15:55 ..
drwxr-x--- 1 docker docker 4096 Aug 11 15:55 docker
Removing intermediate container d76701c0765d
 ---> 14ba02eee117
Step 4/4 : RUN ls -la /home
 ---> Running in c3373d418be8
total 12
drwxr-xr-x 1 root root 4096 Aug 11 15:55 .
drwxr-xr-x 1 root root 4096 Aug 11 15:55 ..
drwxr-x--- 1 root root 4096 Aug 11 15:55 docker
Removing intermediate container c3373d418be8
 ---> 0a6de3939320
Successfully built 0a6de3939320
Successfully tagged tmp:latest
Run Code Online (Sandbox Code Playgroud)

请注意,一旦容器构建完成,/home/docker 就归 root 所有。拔掉chown线没有影响。就像图层完成后不会保留文件权限一样。

我在用:

$ docker --version
Docker version 20.10.25, build 20.10.25-0ubuntu1~22.04.1
Run Code Online (Sandbox Code Playgroud)

我还能够使用相同版本的 Docker 在新的 VM 映像上进行重现。

use*_*676 6

这是该特定版本的 docker 中的错误请参阅此处的错误: https: //bugs.launchpad.net/ubuntu/+source/docker.io-app/+bug/2029523