Selon le Dockment de Docker Compose , lorsque vous écrivez quelque chose comme :
volumes:
- /var/lib/postgresql/data
Il crée un nouveau volume docker et le mappe sur /var/lib/postgresql/data
à l'intérieur du conteneur. Par conséquent, chaque fois que vous exécutez docker-compose up
et docker-compose down
, cela crée un nouveau volume. Vous pouvez confirmer le comportement avec docker volume ls
.
Pour l'éviter, vous avez deux options :
(A) Mapper le répertoire hôte dans le conteneur
Vous pouvez mapper le répertoire de l'hôte dans le conteneur en utilisant <HOST_PATH>:<CONTAINER_PATH>
.
volumes:
- /path/to/your/host/directory:/var/lib/postgresql/data
Les données de postgresql seront enregistrées dans /path/to/your/host/directory
de l'hôte du conteneur.
(B) Utiliser un conteneur externe
docker-compose a une option de conteneur externe .Lorsqu'il est défini sur true, il ne créera pas toujours de volume.Voici un exemple.
version: '2'
services:
dbdata:
image: postgres:9.5.2
volumes:
- mypostgresdb:/var/lib/postgresql/data
volumes:
mypostgresdb:
external: true
Avec external: true
, docker-compose ne créera pas le mypostgredb
volume, vous devez donc le créer vous-même à l'aide de la commande suivante :
docker volume create --name=mypostgredb
Les données de postgresql seront enregistrées dans le volume docker nommé mypostgredb
. Lire la référence
pour plus de détails.