1. ホーム
  2. docker

[解決済み] Docker Compose - 複数のコンテナ間で名前付きボリュームを共有する

2022-04-27 02:59:58

質問

docker-composeとv3を使っています。ドッカーでボリュームをマウントしようとしています。

./appdata:/appdata

これをボリュームとして持っていて、複数のコンテナからそのボリュームを参照したい。その ボリューム構成参照 を表示するだけです。 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: ファイル './docker-compose.yml' において、ボリューム 'app-volume' は文字列ではなく、マッピングでなければなりません。

を変更する必要があることは明らかです。 volumes キーと値のペアがありますが どのように を変更し、サービス間でボリュームを共有できるようにします。

も調べてみました。 volumes_from が、これは事実上、他のコンテナからの継承を可能にするだけです。誰かが volumes_from を、必要なマッピングを含む別のコンテナで使用することができます。 command: true を設定して、そのコンテナが実際に実行されることがないようにすること。

どうすればいいのでしょうか?


注:私は する は、以下のように動作しています。

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

しかし、これは単なる重複であり、名前付きボリュームがそれを回避してくれることを期待しています :-)

解決方法は?

docker-compose 3からdocker named volumeが削除されました。

ただし 拡張フィールド ボリュームソースの重複を避け、将来のタイプミスを防ぐためです。

version: '3.5'

x-services-volume:
  &services-volume
  type: bind
  source: ./appdata
  target: /appdata

services:

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

    php:
        build: ./php/
        expose:
            - 9000
        # Use same way as for nginx if target override not needed.
        volumes:
            - <<: *services-volume
            target: /opt/target-override

NOTE この機能は、バージョン3.4のファイルフォーマットから利用可能です。