2016-09-14 9 views
1

nginxコンテナをサービスとして実行し、ホストマシンとコンテナ間で2つのボリュームを共有しようとしています。他のペアのディレクトリ。--privileged = true以外の場合、Dockerコンテナ内で "Permission denied"が表示される

マイドッキングウィンドウ-compose.ymlは以下の通りです:

version: '2' 

services: 
    nginx: 
    image: nginx 
    build: . 
    ports: 
    - "5000:80" 
    volumes: 
    - /home/user1/share:/share/user1 
    - /home/user2/share:/share/user2 
    restart: always 

私は、これは現在仕事を得ることができる唯一の方法は、しかし、私はこれを起因することは許されないのです、ドッキングウィンドウ・コンファイルへprivileged: trueを追加することですセキュリティ要件のために。

コンテナ内のボリュームにアクセスしようとしたとき、私は次のエラーを取得する:

[[email protected] docker-nginx]# docker exec -it dockernginx_nginx_1 bash 
[email protected]:/# ls /share/user1/ 
ls: cannot open directory /share/user1/: Permission denied 

はしても、次のパラメータを使用してコンテナにbashに自分自身を取り付けるには、リソース(または少なくともリストにアクセスするの私を拒否する内容):
docker exec -it --privileged=true -u 6004:6004 dockernginx_nginx_1 bash
(注意:6004:6004はIDであることを起こる:/share/user1/に渡されるGID所有権)

コンテンツにアクセスする方法はあります昇格された特権でnginx serviceを構築することなく?

おそらく問題は、コンテナに強制されるSELinuxの制限にありますか?
コンテナがDebian GNU/Linux 8 (jessie)実行されていて、ホストがCentOS Linux 7 (Core)

関連の質問実行されている:ドッカーは--selinux-enabled=trueで実行していた

+1

SELinuxに関連していると思うのは、それが 'privileged'フラグで変わるものの1つなのです。 – dnephin

+0

@dnephinあなたは正しいですが、私は古いDockerのバージョンやSELinuxの権限を使っているために2つのリードを持っていました。それはSELinuxだと判明し、デーモンは '--selinux-enabled = true'で実行されました。 –

答えて

2

を、これはでディレクトリの内容にアクセスするから私を禁止コンテナ。
続きを読む:http://www.projectatomic.io/blog/2016/07/docker-selinux-flag/

ソリューションは、これを無効にし、それはどちらか(1)を構成するか、(2)非SELinuxのCentOSのパッケージをインストールすることによって、私はオプション2と一緒に行ったことにより、行うことができます。

Dockerを1.10から1.12.1に再インストールして更新し、docker-engine-selinux.noarchをインストールしないでください。代わりにdocker-engine.x86_64があり、SELinuxパッケージが依存関係としてインストールされています(yumはこれを自動的に行います)。これを実行してDockerデーモンを起動すると、ps aux | grep "docker"docker-containerdが起動していないことを--selinux-enabled=trueオプションで確認できます。

関連する問題