Comment partager des données entre l'hôte et les conteneurs en utilisant des volumes dans Docker composer

je suis à jouer avec Docker Composer et 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

prenons les faits suivants:

  • j'ai un sous-répertoire de l'hôte: ~/var/www
  • les données de ce répertoire devraient persister en ce qui concerne l'état des conteneurs.
  • le conteneur doit écrire les données de l'hôte sous /var/www

j'ai lu des docs ici mais n'est pas clair pour moi comment traiter des volumes de données et d'accueil données.

je tiens à partager les données sur l'hôte avec le conteneur, mais je ne sais même pas si le docker-compose.yml le fichier ci-dessus est juste ou ce qui doit être changé afin d'obtenir ce dont j'ai besoin. Je sais comment le faire en utilisant docker run seul mais n'a pas d'indice pour Docker composer?

Peut m'aider à faire ce travail?

mise à Jour: jouer avec cette

j'ai ajouté ces lignes à l' docker-compose.yml fichier:

    volumes_from:
        - volumes_source

Et I exécutez l' docker-compose up une fois de plus, mais c'est le résultat:

php55devwork_volumes_data_1 exited with code 0
php55devwork_volumes_source_1 exited with code 0

je ne suis pas sûr de ce qui se passe, ni pourquoi j'obtiens l'erreur, tout?

12
demandé sur ReynierPM 2016-10-12 21:03:06

1 réponses

Il semble que vous essayez de définir un "conteneur de données". Ce modèle était courant, mais ce n'est pas nécessaire après le docker volume le système a été ajouté dans Docker 1.9 (https://github.com/docker/docker/blob/master/CHANGELOG.md#190-2015-11-03)

Cette image que vous utilisez, tianon/true, est conçu pour exécuter la commande "true", qui ne fait rien d'autre que retourner le code de sortie 0, puis sortir. C'est pourquoi le conteneur montre comme quitter.

au lieu d'utiliser des conteneurs de données, utilisez un volume nommé. Par exemple, l'approche suivante à l'aide d'un conteneur de données:

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

devient:

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

Puisque vous utilisez composer, vous pouvez définir les volumes en utilisant les volumes principaux.

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

tous les détails et un exemple se trouvent ici:https://docs.docker.com/compose/compose-file/compose-file-v2/

cependant, vous avez aussi mentionné vouloir partager cette donnée de volume entre le conteneur et votre hôte. Dans ce cas, ni un conteneur de données, ni nommé volume est nécessaire. Vous pouvez simplement spécifier un volume hôte directement:

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
22
répondu programmerq 2017-09-06 18:42:49