
RHEL 6.5에서 컨테이너를 실행하려고 하는데 다음 문제가 계속 발생합니다.
sudo docker run -u postgres -it registry/postgres /bin/bash
/bin/bash: error while loading shared libraries: libtinfo.so.5: cannot open shared object file: Permission denied
'root' 사용자로 실행하면 컨테이너가 정상적으로 시작되지만 다른 사용자로 전환하려고 하면 문제가 다시 나타납니다.
$ sudo docker run -u root -it registry/database /bin/bash
[root@8a20410eaa5e /]# su postgres
su: /bin/bash: Permission denied
이는 Postgres를 실행하는 CentOS 6.5를 기반으로 우리가 만든 특정 컨테이너입니다. 이를 빌드하는 Dockerfile에는 "USER postgres"가 포함되어 있으며 이러한 서버를 제외한 다른 곳에서는 잘 작동합니다. busybox 컨테이너를 사용하여 동일한 동작을 재현할 수 있습니다.
$ sudo docker run -u nobody -it 10.188.13.136:8080/busybox
/ $ ls
/bin/sh: ls: Permission denied
RHEL 6.5 호스트에는 SELinux가 활성화되어 있습니다. SELinux와 이 컨테이너가 제대로 작동하는 다른 호스트가 있습니다. 이 호스트의 감사 로그는 깨끗해 보이며 컨테이너를 실행하려고 할 때 볼 수 있는 오류 메시지가 없습니다.
이것이 우리가 지금까지 시도한 것입니다:
- RHEL에서 SELinux 정책("sudo yum 업그레이드 selinux-policy")을 업데이트합니다. 최신 버전이 아니기 때문입니다.
- SELinux를 허용 모드로 설정합니다(setenforce 0). 완전히 끄고 재부팅하려고 시도하지 않았습니다.
- "--selinux-enabled=true"로 Docker 데몬을 시작합니다.
- --privileged를 사용하여 컨테이너를 시작합니다.
- --security-opt=:label:disable을 사용하여 컨테이너를 시작합니다.
- 우리는 최신 RHEL 6.5 커널(2.6.32-504.16.2.el6.x86_64)을 실행하고 있습니다.
또한 컨테이너 내에서 'su' 명령에 대한 strace 세션을 실행했지만 다음 내용 이상은 볼 수 없었습니다.
17 setgid(10000) = 0
17 setuid(10000) = 0
17 munmap(0x7f07a3540000, 2101304) = 0
17 munmap(0x7f07a311c000, 2113776) = 0
17 munmap(0x7f07a2f03000, 2196352) = 0
17 munmap(0x7f07a2cea000, 2198192) = 0
17 munmap(0x7f07a2ae8000, 2101272) = 0
17 munmap(0x7f07a28e4000, 2109624) = 0
17 munmap(0x7f07a26e0000, 2109672) = 0
17 munmap(0x7f07a24d3000, 2148896) = 0
17 munmap(0x7f07a22d0000, 2105488) = 0
17 munmap(0x7f07a20cb000, 2113848) = 0
17 munmap(0x7f07a1ec5000, 2118168) = 0
17 munmap(0x7f07a3321000, 2221912) = 0
17 execve("/bin/bash", ["bash"], [/* 15 vars */]) = -1 EACCES (Permission denied)
17 write(2, "su: ", 4) = 4
17 write(2, "/bin/bash", 9) = 9
필요한 경우를 대비해 전체 strace 덤프가 여기에 있습니다.http://pastebin.com/42C2B8LP.
다음에 무엇을 찾아야할지 잘 모르겠습니다. 아이디어가 있습니까?
답변1
마침내 이 문제를 해결할 수 있었습니다. 즉, 해결책을 찾은 것 같지만 문제가 무엇인지 아직 잘 모르겠습니다.
1) 레지스트리 2.0에서 컨테이너 가져오기 + docker 1.6으로 실행 -> 실패
2) 레지스트리 0.9.x(Docker 자체 또는 내부적으로 실행하는 Artifactory 서버)에서 컨테이너 가져오기 + docker 1.6으로 실행 -> 작동
3) 레지스트리 2.0에서 컨테이너 가져오기 + docker 1.5 이하로 실행 -> 실패
4) 컨테이너 양식 레지스트리 0.9.x 가져오기 + docker 1.5 이상으로 실행 -> 작동
나는 레지스트리 2.0에 결함이 있다고 생각하지 않지만 더 나은 대답은 없습니다. 새 레지스트리는 이전 레지스트리보다 훨씬 빠르지만 당분간은 이전 레지스트리를 계속 사용할 것 같습니다.