wake-up-neo.com

Freigeben von Daten zwischen Host und Containern mithilfe von Volumes in Docker Compose

Ich spiele mit Docker Compose und Volumes

version: '2'
services:
    php-Apache:
        env_file:
          - dev_variables.env
        image: reypm/php55-dev
        build:
            context: .
            args:
                - PUID=1000
                - PGID=1000
        expose:
            - "80"
            - "9001"
        extra_hosts:
            # IMPORTANT: Replace with your Docker Host IP (will be appended to /etc/hosts)
            - "dockerhost:xxx.xxx.xxx.xxx"
        volumes_from:
            - volumes_source
    volumes_source:
        image: tianon/true
        volumes:
            - ../:/var/www
    volumes_data:
        image: tianon/true
        volumes:
            - ./data/sessions:/sessions

Nehmen wir die folgenden Fakten:

  • Ich habe ein Verzeichnis unter dem Host unter: ~/var/www
  • Die Daten in einem solchen Verzeichnis sollten in Bezug auf den Containerstatus bestehen bleiben.
  • Der Container sollte die Daten vom Host unter /var/www Schreiben.

Ich habe docs hier gelesen, aber mir ist nicht klar, wie ich mit Datenmengen und Hostdaten umgehen soll.

Ich möchte die Daten auf dem Host mit dem Container teilen, weiß aber nicht einmal, ob die obige docker-compose.yml - Datei richtig ist oder was geändert werden muss, um das zu erreichen, was ich brauche. Ich weiß, wie man es allein mit docker run Macht, habe aber keine Ahnung, wie Docker Compose funktioniert?

Kann mir jemand helfen, das zum Laufen zu bringen?

Update: damit spielen

Ich habe der Datei docker-compose.yml Folgende Zeilen hinzugefügt:

    volumes_from:
        - volumes_source

Und ich führe den docker-compose up Noch einmal aus, aber das ist das Ergebnis:

php55devwork_volumes_data_1 exited with code 0
php55devwork_volumes_source_1 exited with code 0

Ich bin nicht sicher, was passiert oder warum ich den Fehler erhalte.

14
ReynierPM

Sie versuchen anscheinend, einen "Datencontainer" zu definieren. Dieses Muster war früher üblich, aber dies ist nicht erforderlich, nachdem das System docker volume In Docker 1.9 ( https://github.com/docker/docker/blob/master/CHANGELOG) hinzugefügt wurde. md # 190-2015-11- )

Dieses von Ihnen verwendete Image, tianon/true, Führt den Befehl "true" aus, der nichts anderes ausführt als den Exit-Code 0 zurückzugeben und dann zu beenden. Aus diesem Grund wird der Container als beendet angezeigt.

Verwenden Sie anstelle von Datencontainern ein benanntes Volume. Beispiel: Der folgende Ansatz unter Verwendung eines Datencontainers:

docker create --name data-container -v /sessions tianon/true
docker run --volume-from data-container -d myapp

wird dies:

docker volume create --name sessions
docker run -v sessions:/sessions -d myapp

Da Sie Compose verwenden, können Sie Datenträger mit dem Datenträgerschlüssel definieren.

version: '2'
services:
    php-Apache:
        env_file:
          - dev_variables.env
        image: reypm/php55-dev
        build:
            context: .
            args:
                - PUID=1000
                - PGID=1000
        expose:
            - "80"
            - "9001"
        extra_hosts:
            # IMPORTANT: Replace with your Docker Host IP (will be appended to /etc/hosts)
            - "dockerhost:xxx.xxx.xxx.xxx"
        volumes:
            - sessions:/sessions
            - docroot:/var/www
volumes:
    sessions:
        driver: local
    docroot:
        driver: local

Alle Details und ein Beispiel finden Sie hier: https://docs.docker.com/compose/compose-file/compose-file-v2/

Sie haben jedoch auch erwähnt, dass Sie diese Volumendaten zwischen dem Container und Ihrem Host freigeben möchten. In diesem Fall ist weder ein Datencontainer noch ein benanntes Volume erforderlich. Sie können ein Host-Volume einfach direkt angeben:

version: '2'
services:
    php-Apache:
        env_file:
          - dev_variables.env
        image: reypm/php55-dev
        build:
            context: .
            args:
                - PUID=1000
                - PGID=1000
        expose:
            - "80"
            - "9001"
        extra_hosts:
            # IMPORTANT: Replace with your Docker Host IP (will be appended to /etc/hosts)
            - "dockerhost:xxx.xxx.xxx.xxx"
        volumes:
            - ./data/sessions:/sessions
            - ../:/var/www
24
programmerq