Comment partager des données entre l'hôte et les conteneurs à l'aide de volumes dans Docker Compose
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 dans le répertoire de ce type devrait persister concernant l'état du conteneur.
- Le conteneur doit écrire les données à partir 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 des données de l'hôte.
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
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'ont pas la moindre idée pour le menu fixe Composer?
Peut m'aider à faire ce travail?
Mise à jour: jouer avec cette
J'ai ajouté ces lignes à la docker-compose.yml
fichier:
volumes_from:
- volumes_source
Et je lance le 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?
source d'informationauteur ReynierPM
Vous devez vous connecter pour publier un commentaire.
Il semble que vous essayez de définir un "conteneur de données". Ce modèle est utilisé pour être commun, mais ce n'est pas nécessaire après le
docker volume
système a été ajouté dans le Panneau de 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 le "vrai" de commande, qui n'est rien d'autre que le retour de code de sortie 0, puis sur quitter. C'est pourquoi le conteneur est de montrer qu'il est sorti.Au lieu d'utiliser des conteneurs de données, utilisez un nom de volume. Par exemple, l'approche suivante à l'aide d'un conteneur de données:
devient:
Puisque vous utilisez composer, vous pouvez définir les volumes en utilisant les volumes principaux.
Plus de détails et un exemple se trouve ici: https://docs.docker.com/compose/compose-file/compose-file-v2/
Cependant, vous avez également mentionné vouloir partager ce volume de données 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 hôte volume directement: