2017-09-09 12 views
0

私はDockerを使用しており、Dockerは画像にsymlinkされたファイルCOPYを添付できません。しかし、シンボリックリンクされているファイルは、 'ビルドコンテキスト'にはありません。だから、私はそれらをcpで構築コンテキストにコピーしようとしていましたが、それは本当に遅いです。シンボリックリンクを使わずにコピーする必要がなく、ディスク上の2つの異なる場所でファイルを共有する方法はありますか?`cp`対` rsync`対何か速い

+5

同じ物理パーティションにある場合は、ハードリンクを使用します。 –

+0

Plsは最大の利益を得るための答えを追加します –

答えて

1

これは許可されていませんし、それが再現可能ではありませんので、我々はこれを許可しない

https://github.com/moby/moby/issues/1676

ではありません。あなたのマシン上のシンボリックリンクは私のマシンと同じではなく、同じDockerfileは2つの異なる結果を生成します。また、/ etc/paasswdへのシンボリックリンクを設定すると、ローカルファイルではなくホストファイルがリンクされるため、問題が発生します。まだあなたがすべてのコンテナで必要とされる一般的なファイルがある場合、私は再び共有画像でそれらのすべてを入れて、

FROM mysharedimage as shared 

FROM alpine 
COPY --from=shared /my/common/stuff /common 
.... 

ドッカマルチビルドオプションを使用します

ない最もエレガントな解決策はなく、ドッカーのビルドを行うと、現在のコンテキストが圧縮されてドッカーデーモンに送信されるため、ソフトリンクは機能しません。

ハードリンクを作成することはできますが、ハードリンクはiノードをポイントし、どのファイルを指しているのかを表示しません。他のソフトリンクはどこにポイントしているのかを伝えますが、ビルドはそれらを送信しません。

ln /source/file /dest/file 

あなたの電話は本当にやりたいこと、どのようにしたいですか。

+0

ハードリンクはリンク先のファイルを絶対に表示します。定義上、それらはファイルへのリンクです。 '/ path/to/foo'と'/path/to/bar'が両方とも同じファイルへのリンクである場合、それらは両方とも同じファイルにリンクします。両方のファイルがどちらのファイルを指しているかを知りたければ、チェックしてください。文字通りリンクの1つを「本当の」ファイルと考える理由はありません。彼らはどちらも同じことを言います。 –

+0

@WilliamPursell、私が言ったことは、 'ls -alh'は、ファイルが他のファイルを指していることを表示しないということです。つまり、 'inode'をチェックして、他のファイルがそのinodeを参照しているかどうかを調べる必要があります。私はその理解に何かを見逃していますか? –

+0

'ls -l'は各ファイルのリンク数を表示します。それは(通常)出力の第2列です。私は、あなたの使用フレーズの大部分を「他のファイル」のように例外にしています。現在のディレクトリに 'ln a b 'を作成してリンク' b'を作成すると、 'a'と' b'の両方が同じファイルを参照します。 'a'がファイルで、' b'がファイルへの参照であると考えるのは間違いです。 'a'と' b'は同じファイルの異なる名前であり、名前以外の違いはありません。言い換えれば、 'b'は' '他のファイル ''を指しているのではなく、' a'以上です。それぞれはファイルへのリンクです。 –

関連する問題