GNU/Linux >> Linux の 問題 >  >> Linux

Docker でディレクトリとしてマウントされた単一のファイル ボリューム

test 'docker build -t test' で作成したイメージの名前です '、/test ではありません

Dockerfile を試してください と:

CMD ["ls", "-lah", "/"]
or
CMD ["cat", "/file.json"]

そして:

docker run --rm -it -v $(pwd)/file.json:/file.json test

$(pwd) の使用に注意してください 完全な絶対パスでファイルをマウントするため (相対パスはサポートされていません)

$(pwd) を使用する 、存在しない可能性のあるファイル名またはパスとは対照的に、存在する絶対パスを取得し、大文字と小文字を区別します。
存在しないホスト パスは、コンテナー内のフォルダーとしてマウントされます。


上記の答えでそれは明らかかもしれません...しかし、私の場合はそれを理解するのに時間がかかりました。

-v で共有されているファイルがファイルではなくディレクトリとして表示される根本的な理由は、Docker がホスト上でファイルを見つけられなかったことです。そのため、Docker は、ユーザーが将来作成されるボリューム/ディレクトリを共有したいだけであると考えているため、ホスト上に存在しないファイルの名前である名前でコンテナーに新しいディレクトリを作成します。

上記で報告された問題で、-v コマンドで相対ディレクトリを使用し、docker が相対ディレクトリを認識しない場合は、ファイルがホスト上で見つからず、docker がディレクトリを作成したことを意味します。そして、問題が相対ディレクトリに起因する場合、$(pwd) の使用を提案する上記の回答が正しい解決策になります。

しかし、相対ディレクトリを使用しておらず、同じ問題を抱えているこのページを読んでいる人は、ホストでファイルが見つからない理由を理解してください。

ばかげたタイプミスかもしれません...

クライアントから「docker run」コマンドを実行していて、別のホストで docker コンテナーが生成されており、共有されているファイルがその別のホストに存在しない可能性があります。 -v で共有されるファイルは、docker エージェントがコンテナーを生成するホスト上に存在する必要があります...「docker run -v ...」コマンドが実行されるクライアント上である必要はありません (ただし、多くの場合)

上記の Mac と Windows については、他にも考えられる説明があります... それもありえます。

したがって、ホストからファイルが見つからないことが問題です...セットアップで問題をトラブルシューティングします... $(pwd) を使用すると解決策になる可能性がありますが、常にそうとは限りません.


Linux
  1. Javaファイルマネージャー

  2. Linux – / net Directoryの目的は?

  3. Tar:サブフォルダーを作成せずに単一のファイルをディレクトリに抽出しますか?

  1. スワップボリュームを追加しますか?

  2. Linux ファイル/ディレクトリのパーミッションチートシート

  3. 1 つのコマンドで .tar.gz ファイルを開く

  1. 圧縮 tar 内の単一ファイルの更新

  2. Ubuntu で docker を実行中:マウントされたホスト ボリュームはコンテナーから書き込み可能ではありません

  3. sys/types.h:そのようなファイルまたはディレクトリはありません