Назад | Перейти на главную страницу

Docker 1.6.0 на RHEL 6.5 с SELinux, не может запускать контейнеры без root

Я пытаюсь запустить контейнер на 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 виноват, но у меня нет лучшего ответа. Новый реестр работает намного быстрее, чем старый, но предполагаю, что пока мы будем придерживаться старого реестра.