2016-03-07 8 views
22

docker-composeで使用されているボリュームを追跡するために、名前付きボリュームを使用するのが好きです。これは正常なボリュームのようにうまく動作しますDocker-named名前のマウント済みボリューム

version: 2 
services: 
    example-app: 
    volume: 
     -named_vol:/dir/in/container/volume 
volumes: 
    named_vol: 

しかし、私はローカルホストをマウントするときにそれを動作させる方法を理解できません。 私のようなものを探しています:

version: 2 
services: 
    example-app: 
    volume: 
     -named_homedir:/dir/in/container/volume 
volumes: 
    named_homedir: /c/Users/ 

または

version: 2 
services: 
    example-app: 
    volume: 
     -/c/Users/:/home/dir/in/container/ --name named_homedir 

は、どのような方法で、これは可能ですか私が搭載されたもののために匿名のボリュームで立ち往生していますか?

+0

あなたは答えを見つけますか?私は同様の問題を抱えていますが、おそらく私はどのボリュームが存在するのか分かりません:http://stackoverflow.com/questions/41334488/error-in-file-docker-compose-yml-volume-must- 41334607#41334607 – Richard

+1

私は実際には作成していませんでしたが、まだ空のコンテナとボリュームを持つ 'サービス'を使用しています(ボリュームはコンテナを使用しています) – pvgoddijn

答えて

7

ホストボリュームは、名前付きボリュームまたは匿名ボリュームとは異なります。それらの "名前"はホスト上のパスです。

ホストボリュームにvolumesセクションを使用する方法はありません。

6

私は最近、同じ質問への回答を探していて、このプラグインを見つけました:https://github.com/CWSpear/local-persist 開始したトピックが何かしたいように見えます。

まだ自分で試したことはありませんが、誰かにとって役に立ちそうだと思いました。

+0

興味深いですが、簡単な展開のために、私はおそらくこれのようなものがドッカー(構成)自体で終わるまで待つだろうと思う。 – pvgoddijn

+0

あなたが言っていることは、あなたがアプリストアからアプリをダウンロードするつもりはないが、いつかOSに組み込むことができます。起こらない、それはそうです:_ @ CWSpear私たちは組み込みドライバでこれをサポートしません。あなたはこれを処理するためのプラグインを構築することを歓迎するものではありません._ https://github.com/docker/docker/issues/19990 –

+2

docker-compose.ymlでlocal-persistを使用する例については、https: //github.com/CWSpear/local-persist/blob/master/docker-compose.example.yml –

6

このGitHubの問題では、という名前のボリュームをマウントすると、now is a thing ... 1.11または1.12以降です。 Driver specific optionsが文書化されています。 GitHubのスレッドからいくつかの注意:ホストパスが存在しない場合

docker volume create --opt type=none --opt device=<host path> --opt o=bind 

、それが作成されません。

オプションは、文字通り、マウントsyscallに渡されます。特定の「型」の特殊なケースを追加するかもしれません。なぜなら、上記のnfsの例のように、使用するのが面倒であるからです。

- cpuguy83

@コンでは、あなたのvolumesセクションの下に書くことを使用する方法についてのあなたの特定の質問に対処するには、次のようcpuguy83が書いたためです

my-named-volume: 
    driver_opts: 
      type: none 
      device: /home/full/path #NOTE needs full path (~ doesn't work) 
      o: bind 

をリンクされているgithubスレッドでは、オプションは(フードの下に)mountコマンドに直接渡されます

+2

元の質問の作成ファイルは、どのようにそれを利用できますか? – david

+1

上記の例のようにボリュームを作成し、docker-composeファイルhttps://docs.docker.com/compose/compose-file/#/externalでボリュームをexternalとして設定します。 driver_opts \ nは:\ nは タイプ:なし\ nは デバイス:/ホーム/ユーザー/あなた/(..たわごと書式設定) 私の名前のボリューム: – EDuncan

+1

では、次のファイル、あなたの作曲に持つことができます@デビッドpath/#NOTEには完全パスが必要です。\ n o:bind \ n – linuxbandit

5

私が(ほぼ)同じことをしようとしてきた、のようなもので動作するようです:

version: '2' 
services: 
    example-app: 
    volume: 
     -named_vol:/dir/in/container/volume 
     -/c/Users/:/dir/in/container/volume 
volumes: 
    named_vol: 

は(私はそれをテストし、それを掘り下げるませんでした)私のために働くようです。

+0

Genius!私はちょうどそれを試み、地元のWordpressとデータは 'docker-compose down'の後も残っています。ありがとう!!! – memo

+0

' - named_vol:/ dir/in/container/volume'行を削除しても、設定には影響しません。それはまだ動作します。 'named_vol'という名前のボリュームを作成して基本的にマウントしてから、別の場所にマウントするので、' named_vol'はもうコンテナにマウントされません。これを確認するには、コンテナを調べ、 'named_vol 'というボリュームがコンテナにマウントされているかどうかを確認します。 – kapad

+0

問題が示唆しているように、@ pvgoddijnは名前付きボリュームを持っていたかったので、その行を削除すると確実にそれに影響します。 基本的にはちょっとハッキリですが、コンテナフォルダにボリュームをマウントして、ホストフォルダをまったく同じ場所にマウントするだけです。 このようにして、ボリュームの名前を使用したり、ホストからコンテナファイルを直接編集することもできます。 それは私のための実験の多くでしたが、私は本当にそれをお勧めしません。私は、もしあなたがそのようなことをやろうとするなら、インフラを再設計する必要があると思います。 – rmNyro

0

OPはすでに完全なパスを使用しているようですが、コンテナ内にプロジェクトフォルダをマウントすることに興味がある人は、これが役に立ちます。

これは、@ casaiserと@linuxbanditのようなdriver_optsでこれを行う方法です。しかし、あなたはドッキングウィンドウ・コン文脈でのディレクトリの完全パスを指定しないように通常利用できる環境変数$ PWDを使用しようとすることができます:

logs-directory: 
    driver_opts: 
    type: none 
    device: ${PWD}/logs 
    o: bind 
関連する問題