2015-09-23 5 views
6

Linux上のDockerコンテナで開発する場合、ホストとコンテナ間のファイルの所有権とアクセス権を管理する権限に問題があります。Dockerコンテナで開発するときにどのようにパーミッションを管理しますか?

私はUbuntuとApacheサーバーを実行するDockerイメージがあるとします。 (最近のバージョンの)Apacheのデフォルト設定を使用すると、ドキュメントルートは/var/www/htmlとなり、Apacheはwww-dataユーザーとして実行されます。

いくつかの開発を行うために、Docker経由でドキュメントルートを-v /path/to/my/files:/var/www/htmlで公開します。これが問題の発生場所です。

/path/to/my/filesのファイルは、www-dataというコンテナによって所有されています。私が運が良ければ、ホストにwww-dataのユーザーがいると、そのユーザーになります。それ以外の場合は、コンテナのローカルな別個のユーザーになります。これらのファイルのアクセス許可は、おそらく0755になります。

自分自身(jsmithというユーザー)として働いているとき、不正なファイルアクセス許可&の所有権のために、それらのファイルを編集することはできません。

  • 私はjsmithへのファイルの所有権を変更することができ、それは、Apacheで問題が発生します - それは難しドキュメントルート内のファイルへのアクセスを持っています。

  • 許可を0777に変更できますが、自分の仕事の中で作成した新しいファイルはすべてjsmithになります。

最終的には、開発ファイルに対する所有権&のアクセス権を常に調整する必要があります。他の人もこの問題を抱えているはずですが、開発ワークフローでDockerを使用するというトピックで見たすべての記事は、この問題を見落としています。

私はは解決策を持っているが、私はそれを完全に満足していない:私は/src/myprojectでフォルダを設定

  • 。これは私の開発ファイルを保持し、www-data:www-dataによって所有されています。 BindFS使用

  • は、私がjsmith:jsmithに、~/myprojectでマッピングwww-data:www-data/src/myprojectをマウントします。これにより、私は~/myprojectのファイルを許可なしで編集することができます。

  • Apache Dockerコンテナは/src/myprojectディレクトリに-v /src/myproject:/var/www/htmlをマウントします。 Apacheはファイルの所有権をwww-dataと見て問題はありません。

これはうまくいきますが、あまりにも複雑です。他の人はどのようにしてこの問題を解決しますか?

+0

他の方法でプレミアムの問題を修正しましたか? – Vail

+0

申し訳ありません申し訳ありませんが提案はありません。私はここで同じ答えを探しに来ました。あなたのBindFSのヒントは私には役に立ちました。 – jdhildeb

答えて

0

私は2つの解決策を考えることができます:

は、すべての開発者とイメージの間で共通のグループIDを使用してください。uidはコンテナ内で数値になるかもしれませんが、gidは少なくともグローバルに渡すことなく、読み取りアクセスとオプションで書き込みアクセスを与えます。このgidでファイルを自動的に作成するには、含まれているディレクトリのsetgidビットを使用します。これは最もクリーンなアプローチではなく、他のグループメンバーへのアクセスを引き出すことにつながりますが、組織のワークフローに応じて管理する方がはるかに簡単です。

2番目のオプションは、この質問をした後に追加されたと思われるボリュームという名前です。それらは、uid/gidがコンテナに知られているデータが存在するようにします。これには、データを内部のドッカーディレクトリに移動することの欠点があります。そこでは、コンテナの外での管理が容易ではありません。しかし、同じボリュームをマウントする専用のコンテナを使用して、ボリュームを外部ソース(git pull、rsyncなど)と同期させるマイクロサービスのアプローチがあります。基本的には、データの読み取りと書き込みをすべて、バックアップ、更新ルーチン、およびテストスクリプトを含むコンテナに移動します。

関連する問題