web-dev-qa-db-ja.com

シンボリックリンクされたフォルダーを通常のフォルダーとして表示する方法

ドッキングする必要がある2つのDartアプリケーションがあります。これら2つのアプリは共有ソースディレクトリを使用します。
Dockerがコンテキストディレクトリ外のフォルダーからのファイルの追加を防ぐため(project/app1../sharedからもsharedprojects/app1内のシンボリックリンク)からもファイルを追加できません。

とにかくDockerをだます方法を探しています。

私の簡略化されたプロジェクト構造

- projects
  - app1
   - Dockerfile
   - shared (symlink ../shared)
   - otherSource
  - app2
   - Dockerfile
   - shared (symlink ../shared)
   - otherSource
  - shared
    - source

Dockerfileを1レベル上に移動して、そこからdocker buildを実行できますが、同じディレクトリに2つのDockerfile(app1とapp2)が必要です。

私の現在の考えは、projects/app1/sharedがシンボリックリンクであるという事実を何らかの形で隠すことができれば、この問題は解決されるだろうというものでした。 Sambaを使用してprojectsを共有できるかどうかを確認し、別の場所に再マウントして、Sambaを設定してシンボリックリンクを通常のフォルダーのように処理しましたが、これがサポートされているかどうかはわかりません(Sambaの経験があまりなく、まだ試していません、少し検索しただけです)。

それを可能にする他のツールやトリックはありますか?

ディレクトリ構造は変更しないでください。変更すると他の問題が発生し、ファイルがコピーされなくなります。

43
zoechi

私はdockerの経験があまりないので、これが機能することを保証できませんが、1つの選択肢は、リンクする代わりにディレクトリをマウントすることです。

$ cd projects/app1
$ mkdir shared
$ Sudo mount -o bind ../shared shared/

添付します../sharedから./sharedおよびシステムに対して完全に透過的である必要があります。 man mount

バインドがマウントされます。

Linux 2.4.0以降では、ファイル階層の一部を別の場所に再マウントすることが可能です。呼び出しは次のとおりです。

mount --bind olddir newdir

または、このfstabエントリを使用して:

/olddir /newdir none bind

この呼び出しの後、同じコンテンツに2か所でアクセスできます。

37
terdon