2017-05-31 14 views
11

私はdocker-composeとv3を使用しています。私は、ドッキングウィンドウでボリュームをマウントしようとしている:Docker Compose - 複数のコンテナ間で指定したボリュームを共有する

./appdata:/appdata

私はボリュームとしてこれを持って、その後、複数のコンテナからそのボリュームを参照したいと思います。 volume configuration referenceは、値がない名前付きボリュームとしてdata-volume:しか表示しないので、上記のようにはなりません。

services: 

    nginx: 
     build: ./nginx/ 
     ports: 
      - 80:80 
     links: 
      - php 
     volumes: 
      - app-volume 

    php: 
     build: ./php/ 
     expose: 
      - 9000 
     volumes: 
      - app-volume 

volumes: 
    app-volume: ./appdata:/appdata 

これは私を与える:

明らか

ERROR: In file './docker-compose.yml', volume 'app-volume' must be a mapping not a string.

私はvolumesキー/値ペアを変更する必要がある知っているが、私ははそう、私はボリュームを共有することができ、これを変更することがかどうかはわかりませんサービス間。

私もvolumes_fromをチェックアウトしましたが、これは他のコンテナからの継承を効果的に許可します。私は誰かが彼らが望むマッピングが含まれている別のコンテナにvolumes_fromを使用したが、コンテナが決して実際には実行されないように、command: trueと設定されているのを見たことがあります。

どうすればいいですか?


注、私はは、次の作業持っているん

nginx: 
    volumes: 
     - ./appdata:/appdata 
php: 
    volumes: 
     - ./appdata:/appdata 

をしかし、それは単に重複だと私は名前のボリュームが、私は

答えて

15

という名前のボリュームが、私はより良く理解するために使用HERESに例の設定次のよう

services: 

    nginx: 
     build: ./nginx/ 
     ports: 
      - 80:80 
     links: 
      - php 
     volumes: 
      - app-volume: location_in_the_container 

    php: 
     build: ./php/ 
     expose: 
      - 9000 
     volumes: 
      - app-volume: location_in_the_container 

volumes: 
    app-volume: 

にコンテナ間で共有することができます。それは次のようになります。私はその後、読み、

services: 
    nginx: 
    container_name: nginx 
    build: ./nginx/ 

    volumes: 
     - static-content:/usr/src/app 

    web: 
    container_name: web 
    env_file: .env 
    volumes: 
     - static-content:/usr/src/app/public 
    environment: 
     - NODE_ENV=production 

    command: npm run package 

volumes: 
    static-content: 
+0

私は私の例で使用する2つの場所、ホスト1とコンテナ1があります。もともとは ' - ./appdata:/ appdata'のように見えましたが、あなたのソリューションでは、これらの値のうちの1つしか見ることができません。 – Jimbo

+0

両方のコンテナがボリュームAFAIKに書き込むことができます。したがって、コンテナの1つから名前付きボリュームにフォルダを公開すると、他のコンテナによって表示され上書きされ、その逆もあります。それがまだ不明な場合 - 私はそれをよりよく説明しようとするために私のサンプルコードを貼り付けます – Kannaj

+1

"正解"でなければなりません。 –

3

:-)回避するのに役立つ可能性が望んでいるものですこれにより、名前付きボリュームを使用せずに解決します。

 volumes: 
      - ./appdata:/appdata 

したがって、

services: 

    nginx: 
     build: ./nginx/ 
     ports: 
      - 80:80 
     links: 
      - php 
     volumes: 
      - ./appdata:/appdata 

    php: 
     build: ./php/ 
     expose: 
      - 9000 
     volumes: 
      - ./appdata:/appdata 
+1

ああ、素敵なタイミングnginxコンテナによって提供されてstatic-contentと呼ばれる名前のボリュームに私のwebコンテナから生成された静的ファイルを暴露しています!私はこれを上にしました(私の変更を見てください)。しかし、まだマッピングを複製しているようです。これを3つ以上の容器で使うと、大きくなります。この重複を避けるために名前付きコンテナを使用できますか? – Jimbo

+0

名前の付いたボリュームは、構文と明確なコードについてのみではないということです。ドッカーのデータインストールディレクトリ内にボリュームが作成され、そこにローカルファイル(./appdata)はありません。それはあなたにとってとにかく便利ですか? – Robert

+1

私は間違いなく '。/ appdata'が必要です。それは私がやろうとしていることです。しかし、ここでこの答えを残してください:) +1 – Jimbo

関連する問題