webdevqa.jp.net

docker-compose v3:トップレベルのボリューム構文を使用して複数のコンテナー間でバインドマウントされたボリュームを共有する

Docker-compose synthaxのv2を使用すると、次のようなことができました。

version: '2'
services:
  app:
    image: tianon/true
    volumes:
      - ../app:/var/www/app
  nginx:
    image: nginx
    volumes_from:
      - app
  php:
    image: php
    volumes_from:
      - app

V3.2では、volumes_frominvalid optionになりました。ドキュメントはすべて、all the ways betterである新しいトップレベルボリュームsynthaxを使用するためのものです。私はgithubに関するいくつかのコメントを読みました、そして人々が提案する唯一の解決策は

version: '3.2'
services:
  nginx:
    image: nginx
    volumes:
      - app:/var/www/app
  php:
    image: php
    volumes:
      - app:/var/www/app
volumes:
  app:
    driver_opts:
      type: none
      device: ../app
      o: bind

これは明らかに悪化しているように見えますが、私にとってはうまくいきません。エラーが発生します:no such file or directory。では、他に何を試すべきですか?トップレベルのボリュームの代わりにlinksを使用できるようですが、ドキュメントではレガシーオプションと見なされています。では、新しい構文でそれを正しく行う方法は?

編集:質問は重複の可能性があると特定されましたが、同意しません。説明については、以下の私のコメントを参照してください。

11
m0onspell

トピックのスターターがすでに述べたように、volumes_fromは新しいdocker-compose構文から削除され、 ドキュメント に従って、最上位キーvolumes。ドキュメントには、 ボリュームバインドマウント の違いも記載されています。そのうちの1つは、コンテンツの管理者です。

対照的に、ボリュームを使用すると、ホストマシン上のDockerのストレージディレクトリ内に新しいディレクトリが作成され、Dockerがそのディレクトリの内容を管理します。

この場合、ホストフォルダーをボリュームにバインドマウントし、ホストのファイルシステムとDockerによって同時に制御されるようにすることは意味がありません。

それでも同じフォルダーを2つ以上のコンテナーにバインドマウントする場合は、次のようにしてみてください。

version: '3.2'
services:
  nginx:
    image: nginx
    volumes:
      - type: bind
        source: ../app
        target: /var/www/app
  php:
    image: php
    volumes:
      - type: bind
        source: ../app
        target: /var/www/app
2
Bart Joosten