docker-compose는 VMware Workstation의 ubuntu 22.04.3에서 소유권을 변경할 수 없습니다.

docker-compose는 VMware Workstation의 ubuntu 22.04.3에서 소유권을 변경할 수 없습니다.

VMware 워크스테이션: 16.2.5/17.0.2

우분투: 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.

관련 정보