Docker 컨테이너 - 터치: 권한이 거부되었습니다.

Docker 컨테이너 - 터치: 권한이 거부되었습니다.

여기에는 문제가 무엇인지 알 수 없는 이상한 문제가 있습니다.

내 Linux 상자(Ubuntu 16.04 LTS)의 Docker 컨테이너에서 모든 것을 실행하고 있습니다.

docker run -ti --rm promregator/promregator:0.2.1 /bin/bash

(참고: 이미지는 를 통해 공개적으로 제공됩니다 hub.docker.com.) 명령

docker version

(호스트에서) 반환

Client:
 Version:      1.12.3
 API version:  1.24
 Go version:   go1.6.3
 Git commit:   6b644ec
 Built:        Wed Oct 26 22:01:48 2016
 OS/Arch:      linux/amd64

Server:
 Version:      1.12.3
 API version:  1.24
 Go version:   go1.6.3
 Git commit:   6b644ec
 Built:        Wed Oct 26 22:01:48 2016
 OS/Arch:      linux/amd64

컨테이너에서 다음과 같은 파일을 만들고 싶습니다.

promregator@6a68713fafc9:/$ cd /opt/promregator
promregator@6a68713fafc9:/opt/promregator$ touch test
touch: cannot touch 'test': Permission denied

(promregator는 이미지가 기본적으로 실행되는 사용자입니다). 참고하세요

  • 디렉터리는 이미지에서 직접 나오며 볼륨 매핑되지 않습니다.
  • 디렉터리는 동일한 사용자가 소유하고 있으며 권한은 0750입니다.

    promregator@6a68713fafc9:/opt/promregator$ ls -al
    total 34348
    drwxr-x--- 2 promregator promregator     4096 Apr  1 01:00 .
    drwxr-xr-x 5 root        root            4096 Mar 20 01:01 ..
    -rw-r----- 1 promregator promregator 35159385 Apr  1 00:59 promregator.jar
    -rwxrwx--- 1 promregator promregator      642 Apr  1 00:57 promregator.sh
    

    숫자상으로 사용자는 1000명이다.

    promregator@6a68713fafc9:/opt/promregator$ ls -aln .
    total 34348
    drwxr-x--- 2 1000 1000     4096 Apr  1 01:00 .
    [...]
    

또한 동일한 작업이 다음에서 작동한다는 점에 유의하세요 /home/promregator.

promregator@6a68713fafc9:/opt/promregator$ cd /home/promregator
promregator@6a68713fafc9:~$ touch test
promregator@6a68713fafc9:~$ ls -al .
total 8
drwx------ 2 promregator promregator 4096 Apr  7 11:45 .
drwxr-xr-x 4 root        root        4096 Apr  7 11:45 ..
-rw-r--r-- 1 promregator promregator    0 Apr  7 11:45 test
promregator@6a68713fafc9:~$ ls -aln .
total 8
drwx------ 2 1000 1000 4096 Apr  7 11:45 .
drwxr-xr-x 3    0    0 4096 Apr  7 11:45 ..
-rw-r--r-- 1 1000 1000    0 Apr  7 11:45 test

다음을 사용하여 컨테이너를 루트로 실행하면

docker run -ti --rm -u root promregator/promregator:0.2.1 /bin/bash

첫 번째 위치에 파일을 만들 수 있습니다.

root@eb29fa8acb95:/# cd /opt/promregator/
root@eb29fa8acb95:/opt/promregator# touch test

이는 사용자에게 뭔가 "이상한" 것이 있다는 것을 알려줍니다 promregator.

다른 호스트에서(이미지의 sha1 ID를 비교했습니다) 컨테이너가 docker run -ti --rm promregator/promregator:0.2.1 /bin/bash. 해당 호스트의 버전 정보는 다음을 나타냅니다.

Client:
 Version:       17.12.0-ce
 API version:   1.35
 Go version:    go1.9.2
 Git commit:    c97c6d6
 Built: Wed Dec 27 20:11:19 2017
 OS/Arch:       linux/amd64

Server:
 Engine:
  Version:      17.12.0-ce
  API version:  1.35 (minimum version 1.12)
  Go version:   go1.9.2
  Git commit:   c97c6d6
  Built:        Wed Dec 27 20:09:54 2017
  OS/Arch:      linux/amd64
  Experimental: false

어떤 아이디어나 힌트라도... 제게는 이것이 무엇일까요?

미리 감사드립니다!

답변1

오늘도 같은 문제가 발생했습니다. 내 해결책은 "setenforce 0"으로 selinux를 끄는 것입니다.

관련 정보