Podle Dokumentu Docker Compose , když napíšete něco jako:
volumes:
- /var/lib/postgresql/data
Vytvoří nový svazek dockeru a namapuje jej na /var/lib/postgresql/data uvnitř kontejneru. Proto pokaždé, když spustíte docker-compose up a docker-compose down , vytvoří nový svazek. Chování můžete potvrdit pomocí docker volume ls .
Chcete-li se tomu vyhnout, máte dvě možnosti:
(A) Mapování hostitelského adresáře do kontejneru
Adresář hostitele můžete namapovat na kontejner pomocí <HOST_PATH>:<CONTAINER_PATH> .
volumes:
- /path/to/your/host/directory:/var/lib/postgresql/data
Data postgresql budou uložena do /path/to/your/host/directory hostitele kontejneru.
(B) Použijte externí kontejner
docker-compose má možnost externího kontejneru .Když je nastavena na hodnotu true, nevytvoří vždy objem. Zde je příklad.
version: '2'
services:
dbdata:
image: postgres:9.5.2
volumes:
- mypostgresdb:/var/lib/postgresql/data
volumes:
mypostgresdb:
external: true
S external: true , docker-compose nevytvoří mypostgredb objem, takže si jej musíte vytvořit sami pomocí následujícího příkazu:
docker volume create --name=mypostgredb
Data postgresql budou uložena do svazku docker s názvem mypostgredb . Přečtěte si reference
pro více podrobností.