docker-compose.ymlで名前付きボリュームのホストにパスを設定する方法


82

以下の例では、volumeという名前のdbdataを作成し、dbサービス内で参照しています。

version: '2'
services:
  db:
    image: mysql
    volumes:
      - dbdata:/var/lib/mysql
volumes:
  dbdata:
    driver: local

https://stackoverflow.com/a/35675553/4291814から)

ボリュームのデフォルトのパスは次のとおりです。

/var/lib/docker/volumes/<project_name>_dbdata

私の質問は、dbdataボリュームのホスト上のパスを構成する方法ですか?

回答:


70

localボリュームのドライバーが任意のマウントを使用する能力を来ります。バインドマウントを使用することで、まさにこれを実現できます。

にマウントされる名前付きボリュームを設定するには/srv/db-data、次のようにdocker-compose.ymlなります。

version: '2'
services:
  db:
    image: mysql
    volumes:
      - dbdata:/var/lib/mysql
volumes:
  dbdata:
    driver: local
    driver_opts:
      type: 'none'
      o: 'bind'
      device: '/srv/db-data'

作成ファイル形式のバージョン2でテストしていませんが、https://docs.docker.com/compose/compose-file/compose-versioning/#version-2は、機能しないはずであることを示していません。

Windowsでもテストしていません...


3
それよりもはるかに単純な構文でバインドマウントを使用できます:volumes:-。/ dbdata:/ var / lib / mysql。バインドマウントの唯一の「問題」は、名前付きボリュームとは異なり、コンテナの内容をホストに自動的にコピーしないことです。docs.docker.com/compose/compose-file/#volumes
mikey

12
OPは、バインドマウントを最も簡単な方法で使用する方法ではなく名前付きボリュームについて具体的に質問しました。名前付きボリュームのパスを構成する場合は、上記のように、バインドマウントを使用してこれを実現できます。名前付きボリュームを使用すると、docker-compose.yml全体でそれらを簡単に再利用できるという利点があります。
クリスチャンウルブリッチ2018年

申し訳ありませんが、クリスチャン、これが名前付きボリュームを使用していたことを理解していませんでした。これはバインドマウントの使い方を示していると思いました。これは正しい解決策のようです(stackoverflow.com/a/45039609/3080207を参照)。
mikey 2018年

任意のマウントとはどういう意味ですか?Dockerコンテナ自体またはホストマシン上のランダムパスですか?ありがとう。
Amr Afifi

ホストでは任意のマウントを使用できます。このようにして、たとえばsshfsを使用して何かをマウントし、それを名前付きボリュームにバインドマウントすることもできます。
クリスチャンウルブリッチ

8

名前付きボリュームの場所はdockerによって管理されます。自分で場所を指定する場合は、ホストディレクトリを「バインドマウント」するか、パスを指定できるボリュームプラグインを使用できます。

私が最近投稿した別の回答でいくつかの詳細を見つけることができます。https://stackoverflow.com/a/36321403/1811501


1
実際にlocalは、docker自体に付属しているボリュームプラグインを使用する必要があります。例については私の答えを参照してください。
クリスチャンウルブリッチ

0

現在 docker-compose v3.2次の実行できます。

注:多くの場合version: "3"、最新/最新のV3を使用すると思いましたが、使用していません。v3.0少なくとも指定する必要があります。3.2。以下の構成方法を使用があります。

https://docs.docker.com/compose/compose-file/#volumes

version: "3.2"
services:
  db:
    image: postgres:latest
    volumes: 
      - type: volume
        source: /opt/db/vols/dbdata
        target: /var/lib/postgresql/data
        volume:
          nocopy: true



volumes:
   dbdata:

注意:

示されているように、名前付きボリュームは最上位ボリュームキーの下にリストされている必要があります。


@FreeSoftwareServerの回答がわからない場合は申し訳ありませんが、ここでの質問は「名前付きボリュームをホストフォルダーにマップする方法」です。
ディーラジクマール

私は答えを単純化しようとしました、おそらくあなたの特定の問題で新しい質問を始めてください。@Dheeraj Kumar
FreeSoftwareServers

ボリュームとしてdbdataサービスにどのようにマッピングされますdbか?@FreeSoftwareServers
Nam G VU

ソースライン?@NamGVUおそらくあなたの特定の問題に関する新しい質問の方が良いでしょう
FreeSoftwareServers
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.