
Я пытаюсь запустить контейнер на 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
Это конкретный контейнер, созданный нами на основе CentOS 6.5, который запускает Postgres. 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 и этот контейнер работают нормально. Журнал аудита для этого хоста выглядит чистым, никаких сообщений об ошибках, которые я вижу при попытке запустить контейнер.
Вот что мы уже попробовали:
- обновить политики SELinux в RHEL («sudo yum upgrade selinux-policy»), так как они не были последними версиями
- перевести SELinux в разрешающий режим (setenforce 0); не пробовал полностью отключить его и перезагрузить
- запустите демон Docker с помощью "--selinux-enabled=true"
- запустите контейнер с --privileged
- запустите контейнер с --security-opt=:label:disable
- мы используем новейшее ядро RHEL 6.5: 2.6.32-504.16.2.el6.x86_64
Также запустил сеанс strace для команды «su» внутри контейнера, но не смог увидеть ничего, кроме этого:
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 или новее -> работает
Я не думаю, что Registry 2.0 виноват, но у меня нет лучшего ответа. Новый реестр намного быстрее старого, но, думаю, мы пока останемся со старым реестром.