web-dev-qa-db-ja.com

コンテナでローカルファイルを使用するにはどうすればよいですか?

プログラムを実行するコンテナを作成しようとしています。事前に構成されたイメージを使用しているため、プログラムを実行する必要があります。ただし、それは機械学習プログラムであり、実行するにはコンピューターのデータセットが必要です。

ファイルが大きすぎてコンテナにコピーできません。コンテナーで実行されているプログラムがコンピューターのローカルディレクトリでデータセットを検索するのが最適ですが、これを行う方法がわかりません。

いくつかのdockerコマンドでこの参照を行う方法はありますか?またはDockerfileを使用していますか?

27
gomesh

はい、これを行うことができます。説明しているのはバインドマウントです。この件に関するドキュメントについては、 https://docs.docker.com/storage/bind-mounts/ を参照してください。

たとえば、ホームディレクトリのフォルダーをコンテナーの/mnt/mydataにマウントする場合、次の操作を実行できます。

docker run -v /Users/andy/mydata:/mnt/mydata myimage

これで、コンテナ内の/mnt/mydataがホスト上の/Users/andy/mydataにアクセスできるようになります。

Docker for MacまたはDocker for Windowsを使用している場合、デフォルトで許可されている特定のディレクトリがホスト上にあることに注意してください。

MacまたはWindowsでDocker Machineを使用している場合、Docker EngineデーモンはmacOSまたはWindowsファイルシステムへのアクセスを制限されています。 Docker Machineは、/ Users(macOS)またはC:\ Users(Windows)ディレクトリを自動共有しようとします。そのため、macOSでファイルまたはディレクトリをマウントできます。

2019年7月更新:

ドキュメントのリンクと名前が正しくなるように更新しました。これらのタイプのマウントは、「バインドマウント」と呼ばれます。 MacまたはWindows用のDockerに関するスニペットはドキュメントに表示されなくなりましたが、引き続き適用されるはずです。なぜそれを削除したのか分かりません(私のDocker for Macには、ホストで許可されたマウントパスの明示的なリストがまだあります)。

41
Andy Shinn