これは、Docker ホスト コンピューターと対話する Docker コンテナーを使用する際のかなり技術的な問題に関するもので、一般にコンテナー内でのホスト ファイルシステムの使用に関連します。
これは特に再現可能な研究環境で起こります。
私はその問題への取り組みに役立つオープンソース ユーティリティを開発しました。
Docker コンテナの初期および主な使用例: 一部のネットワーク ポートを使用してホスト システムとのみ対話する 自己完結型 アプリケーション。
Web アプリケーションについて考えてみましょう。Docker コンテナには通常、Web サーバーと Web アプリケーションが含まれており、たとえばポート 80 (コンテナ内) で実行されます。次に、コンテナの内部ポート 80 をホスト ポート (8000 など) にバインドすることにより、コンテナがホスト上で実行されます。
その場合、コンテナ化されたアプリとホスト システム間の唯一の対話は、このバインドされたネットワーク ポートを介したものになります。
実行環境としてのコンテナはまったく異なります:
Dockerコンテナとホストファイルシステム
Rstudio は Docker コンテナ内にインストールされて実行されていますが、プロジェクト フォルダー内のファイルを読み取って編集する必要があります。
バインド マウントします。
これで、Docker コンテナ内からファイルにアクセスできるようになります。
1001 があり、コンテナ内の Rsudio プロセスを所有するユーザーが 0 (root) または 1002 であると仮定します。 ]
コンテナ ユーザーがroot の場合、ファイルの読み取りに問題はありません。
しかし、既存のファイルを編集して新しいファイル (pdf、html など) を作成するとすぐに、これらのファイルはホスト ファイルシステム上のルート
に属します!.
つまり、これらは root.
に属しているため、ローカル ホスト ユーザーはそれらを使用したり削除したりできなくなります。
1002 の場合、Rstudio はファイルの読み取り、編集、または新しいファイルの生成ができない可能性があります。
たとえそれができたとしても、非常に寛容な権限を設定すると、ローカル ホスト ユーザーはそれらを使用できなくなる可能性があります。
ファイル所有者の問題の解決パート 1: docker run --user オプション
1001) が何になるかを事前に知ることができないため、事前に設定することはできません
Docker コンテナ ユーザーのユーザー ID。
docker run は、指定されたユーザー ID で 擬似 ユーザーを作成できる --user オプションを提供するようになりました。
実行時。たとえば、 docker run --user 1001 ... は、プロセス
で実行される docker コンテナを作成します。
ユーザー ID
1001. のユーザーに属します
動的に作成されたユーザーに関するいくつかの癖があります:
私たちが本当に望んでいるのは、Docker コンテナ ユーザーを事前設定し、
実行時... でその userid を動的に変更できるようにすることです。
docker エントリポイント として使用することを目的としたオープン ソース ユーティリティです。
これを使用する方法を見てみましょう。これを docker ENTRYPOINT として設定し、使用するユーザーを指定し、そのuserid を動的に変更します:
ENTRYPOINT ["/usr/local/bin/docker_userid_fixer","user1"]用語を正確に言いましょう:
しかし、要約すると次のようになります:
でも、言い換えてみます。
setuid root です。
ユーザー ID を変更するには root 権限が必要であり、この setuid は
に対してのみその特権実行を有効にします。
docker_userid_fixerプログラム、そしてそれは非常に短期間でした。
リクエストされたユーザー (およびユーザー ID) に送信されます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3