Я пытаюсь запустить контейнер на 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 и этот контейнер работают нормально. Журнал аудита для этого хоста выглядит чистым, сообщений об ошибках, которые я вижу при попытке запустить контейнер, нет.
Вот что мы до сих пор пробовали:
Также запустите сеанс 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) вытащить контейнер из реестра 2.0 + запустить с докером 1.6 -> сбой
2) вытащить контейнер из реестра 0.9.x (либо собственный Docker, либо сервер Artifactory, который мы запускаем внутри) + запустить с docker 1.6 -> работает
3) вытащить контейнер из реестра 2.0 + запустить с докером 1.5 или старше -> сбой
4) вытащить реестр формы контейнера 0.9.x + запустить с докером 1.5 или новее -> работает
Я действительно не думаю, что Registry 2.0 виноват, но у меня нет лучшего ответа. Новый реестр работает намного быстрее, чем старый, но предполагаю, что пока мы будем придерживаться старого реестра.