
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 とこのコンテナが正常に動作する他のホストもあります。このホストの監査ログはクリーンで、コンテナを実行しようとしたときにエラー メッセージは表示されません。
これまでに試したことは次のとおりです。
- RHELのSELinuxポリシーを更新します(「sudo yum upgrade selinux-policy」)。最新バージョンではなかったためです。
- SELinux を permissive モードにする (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 以降で実行 -> 動作する
Registry 2.0 に問題があるとは思いませんが、他に良い答えはありません。新しいレジストリは古いものよりはるかに高速ですが、当面は古いレジストリを使い続けることになると思います。