1. ホーム
  2. docker

[解決済み] コンテナ上でローカルファイルを使用するには?

2022-10-27 14:18:39

質問

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

ファイルが大きすぎて、コンテナにコピーできません。コンテナで実行中のプログラムが、私のコンピュータのローカル ディレクトリにあるデータセットを検索できればベストなのですが、これをどのように実行すればよいのかわかりません。

このリファレンスを何らかのDockerコマンドで行う方法はありますか?もしくはDockerfileを使用する方法はありますか?

どのように解決するのでしょうか?

はい、できます。説明されているのは、バインドマウントです。以下を参照してください。 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:the \Users (Windows)ディレクトリを自動で共有しようと試みます。そのため、macOS上でファイルやディレクトリをマウントするには、以下のようにします。

2019年7月に更新しました。

ドキュメントのリンクとネーミングが正しくなるように更新しました。これらのタイプのマウントは、"bind mounts" と呼ばれます。Mac または Windows 用の Docker に関するスニペットは、もはやドキュメントに表示されませんが、まだ適用できるはずです。なぜ削除されたのかはわかりません (私の Mac 用 Docker には、ホスト上で許可されるマウント パスの明示的なリストがあります)。