webentwicklung-frage-antwort-db.com.de

Docker Compose - Geben Sie das benannte Volume für mehrere Container frei

Ich benutze Docker-Compose und V3. Ich versuche, ein Volume im Docker bereitzustellen:

./appdata:/appdata

Ich möchte dies als Volume haben und dann auf dieses Volume aus mehreren Containern verweisen. Die Volume-Konfigurationsreferenz zeigt nur data-volume: als benanntes Volume ohne Wert, sieht also nicht wie oben aus.

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

Das gibt mir:

FEHLER: In der Datei './docker-compose.yml' muss das Volume 'app-volume' eine Zuordnung sein, keine Zeichenfolge.

Natürlich weiß ich, dass ich das Schlüssel/Wert-Paar volumes ändern muss, aber ich bin nicht sicher , wie ich dies ändern soll, damit ich es kann ein Volumen zwischen Diensten teilen.

Ich habe auch ausgecheckt volumes_from Dies ermöglicht jedoch effektiv nur die Vererbung von anderen Containern. Ich habe jemanden gesehen, der volumes_from in einem anderen Container, der die gewünschte Zuordnung enthält, aber mit command: true so einstellen, dass der container nie wirklich läuft, was mir nur wie ein hack aussieht.

Wie kann ich das machen?


Beachten Sie, ich habe die folgende Arbeitsweise:

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

Aber das ist nur eine Vervielfältigung und ich hoffe, ein genanntes Volume kann mir dabei helfen, das zu vermeiden :-)

61
Jimbo

Die benannten Volumes können auf folgende Weise für mehrere Container freigegeben werden:

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: 

Hier ist eine Beispielkonfiguration, die ich zum besseren Verständnis verwende. Ich lege die aus meinem web -Container generierten statischen Dateien einem benannten Volume mit dem Namen static-content, das dann vom nginx -Container gelesen und geliefert wird:

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:
89
Kannaj

Dies löst es, ohne benannte Volumes zu verwenden:

      volumes:
          - ./appdata:/appdata

So sieht es aus:

services:

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

  php:
      build: ./php/
      expose:
          - 9000
      volumes:
          - ./appdata:/appdata
20
Robert