2017-07-31 4 views
-1

Dockerをnon-root userとして実行するように設定しました。今では普通のユーザーとしてコンテナを始めることができ、もっと快適に感じることができます。マウントされたボリュームに対するドッカーのアクセス許可。彼らはなぜ根に属しているのですか?

ホスト上の一方
[email protected]:~$ docker run -it -v ~/test:/test alpine:3.6 sh 
/# touch /test/test1 

[email protected]:~$ ls -l ~/test/ 
total 0 
-rw-r--r-- 1 root root 0 Jul 31 15:50 test1 

はなぜファイルがrootに属しているのですか?どのように私はそれらを作ることができ、コンテナ内のすべての作成されたファイルはmeに属していますか?

興味深い事実:これはDebian Linuxで発生します。逆に、Macで同じことをすると、作成されたファイルはmeに属します。

答えて

1

Mac OS DockerおよびLinux Dockerの動作には多くの変更があります。その部分を無視してください。 Linuxの側面に焦点を当てる。

https://docs.docker.com/engine/installation/linux/linux-postinstall/#manage-docker-as-a-non-root-userを使って行ったことは、基本的にルート以外のユーザーがドッカーグループにアクセスできることを意味します。そのドッカーグループを通して、ドッカーコマンドを実行することができます。しかし、ドッカーデーモンはまだrootユーザーとして実行されています。

あなたは

ps aux | grep dockerd 

を実行することで確認することができますし、ボリュームのマッピングを行う際に、ディレクトリが最終的には、rootユーザー権限を持っているドッキングウィンドウによって作成されます。あなたが探しているものは、ごく最近にDocker user namespacesとして開始されました。以下のURL

https://success.docker.com/KBase/Introduction_to_User_Namespaces_in_Docker_Engine

の詳細をお読みくださいこれはどのように代わり、ルートのマップされたユーザーを使用してドッキングウィンドウコンテナを実行する方法をご案内します。要するに、コンテンツ

/etc/docker/daemon.json

{ 
"userns-remap": "<a non root user>" 
} 

そしてドッカサービスを再起動の下に持っている/更新/etc/docker/daemon.jsonファイルを作成します。今ではあなたのドッカーコンテナにはroot特権があると思われますが、ホスト上のroot以外のユーザとして実行されます

+0

本当にありがとう、ありがとう、本当に理解してくれてありがとう!ユーザーネームスペースを使用することによる潜在的な否定的な(セキュリティ、パフォーマンス)影響はありますか?サーバ側では、ホスト側のマウントされたボリュームにあるファイルにアクセスしたり変更したりするたびに 'sudo'する必要がありました。 – qqilihq

+1

ユーザーネームスペースマッピングの前に含意がありました。コンテナから逃げる何かがルートアクセスを直接得るでしょう。しかし、ユーザーの名前空間では、たとえコンテナが何らかの形でホストにアクセスしたとしても、ルートにアクセスすることはできません。だから、それを使うことははるかに安全です。 sudoについて、現在のユーザーをuserns-remapとして使用する場合、sudoなしでshoudlを使用できますか? –

+0

Re 'sudo':まあ、それは私の質問の背後にある元の意図でした:)今までの情報をありがとう! – qqilihq

関連する問題