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í.