web-dev-qa-db-ja.com

Docker-compose名前付きマウントボリューム

Docker-composeが使用するボリュームを追跡するために、名前付きボリュームを使用するのが好きです。これは、次のような「通常の」ボリュームに最適です。

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

これは何らかの方法で可能ですか、またはマウントされたボリュームの匿名ボリュームに固執していますか?

45
pvgoddijn

このGitHubの問題を読むとわかるように、名前付きボリュームのマウント今は重要です …1.11または1.12以降)。 ドライバー固有のオプション が文書化されています。 GitHubスレッドからのメモ:

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

ホストパスが存在しない場合、作成されません。

オプションは、文字通りマウントsyscallに渡されます。 nfsの例[上記参照]のように、特定の「タイプ」には使いにくいため、特殊なケースを追加することがあります。

– @ cpuguy83

作成でそれを使用する方法に関する特定の質問に対処するには、volumesセクションの下に書き込みます。

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

これは、リンクされたgithubスレッドでcpuguy83が記述したように、オプションが(内部で)mountコマンドに直接渡されるためです。

EDIT:コメント通り…

  • …@ visslav、${PWD}を相対パスに使用できます。
  • …@ mikeyjk、既存のボリュームを削除する必要がある場合があります。

    docker volume rm $(docker volume ls)
    
27
kaiser

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

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

7
dnephin

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

まだ自分で試したことはありませんが、誰かに役立つかもしれないと思いました。

7
Stas Makarov

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

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

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

5
rmNyro

OPはすでにフルパスを使用しているように見えますが、ほとんどの人のように、コンテナ内にプロジェクトフォルダをマウントすることに関心がある場合は、これが役立つかもしれません。

@kaiserが言って@linuxbanditが例示したように、これはdriver_optsでそれを行う方法です。ただし、通常使用可能な環境変数$ PWDを使用して、docker-composeコンテキストでディレクトリのフルパスを指定しないようにすることができます。

logs-directory:
  driver_opts:
    type: none
    device: ${PWD}/logs
    o: bind
4
villasv