web-dev-qa-db-ja.com

Dockerの親システムからコンテナーへのディレクトリのマウント

親システムからDockerのコンテナにディレクトリをマウントするにはどうすればよいですか?

53
Pavel Nuzhdin

*更新-下記の回答を参照してください。これはもはや正しい回答ではありません*

Dockerは繰り返し実行可能な環境を保証できなくなったため、設計によりマウントすることはできません。

ただし、次のことができます。

  1. ホストのルートファイルシステムをインポートし、そこから新しいイメージを作成します。

    tar -C / -c . | docker import - entend/custombase
    
  2. bootstrap rootファイルシステム、たとえば 'debootstrap'を実行した結果。)プルベース ')

    debootstrap precise ./bootstrap
    tar -C ./bootstrap -c . | docker import - entend/ubuntubase
    
  3. 実行時にローカルディレクトリの内容をコンテナに挿入します。

    IMAGE=base; SRC=./stuff; DST=/tmp/stuff; CMD="echo hello world"; tar -C $src -c . | docker run $IMAGE -i /bin/sh -c "tar -C $DST -x; $CMD"
    

    これにより、コンテナが$ IMAGEから実行され、ホストディレクトリ$ SRCがコンテナディレクトリ$ DSTにコピーされ、コマンド$ CMDが実行されます。

    この最後の例は、通常、コンテナ内でビルドコマンドを実行する前にソースコードを挿入するために使用されます。

11
Solomon Hykes

最終更新として、この機能はDockerでリリースされるようになりました(ただし、プルリクエストが@imiricによってリンクされてからAPIが変更されています)。

次のようなコマンドを使用するだけです

docker run -v /tmp:/root myImage

マウントするために/tmpホストマシンから/root画像内。

ソース: https://docs.docker.com/engine/userguide/dockervolumes/

157
user2089674

この質問を更新するだけで、Dockerですぐに可能になります。

このプルリクエスト は実際にこの機能を実装しており、まもなくマスターにマージされます。

this fork をインストールすれば、すぐに使用できます。

5
imiric

OS XとWindowsのトリック

2つの連続したマウント:ここでの多くの投稿は、2つのboot2dockerを使用している可能性があります。何も表示されないのは、ホストではなくboot2dockerからディレクトリをマウントしているためです。基本的に、2つの連続したマウントが必要です。1つ目はホストからシステムにディレクトリをマウントし、2つ目は次のようにboot2dockerからコンテナに新しいディレクトリをマウントします。

  1. Boot2dockerにローカルシステムをマウントします。

    Sudo mount -t vboxsf hostfolder /boot2dockerfolder
    
  2. Linuxコンテナーにboot2dockerファイルをマウントする

    docker run -v /boot2dockerfolder:/root/containerfolder -i -t imagename
    

その後、containerfolder内でlsを実行すると、hostfolderのコンテンツが表示されます

4
louisd

これは[〜#〜] is [〜#〜] Dockerで可能です:

データをアプリケーションコンテナーにマウントします。

docker run -t -i -rm -volumes-from DATA -name client1 ubuntu bash
4