Theo Dockment of Docker Compose , khi bạn viết một cái gì đó như:
volumes:
- /var/lib/postgresql/data
Nó tạo một khối lượng docker mới và ánh xạ nó tới /var/lib/postgresql/data
bên trong container. Do đó, mỗi lần bạn chạy docker-compose up
và docker-compose down
, nó tạo ra khối lượng mới. Bạn có thể xác nhận hành vi với docker volume ls
.
Để tránh nó, bạn có hai lựa chọn:
(A) Ánh xạ thư mục máy chủ lưu trữ vào vùng chứa
Bạn có thể ánh xạ thư mục của máy chủ lưu trữ vào vùng chứa bằng cách sử dụng <HOST_PATH>:<CONTAINER_PATH>
.
volumes:
- /path/to/your/host/directory:/var/lib/postgresql/data
Dữ liệu của postgresql sẽ được lưu vào /path/to/your/host/directory
của máy chủ vùng chứa.
(B) Sử dụng vùng chứa bên ngoài
docker -omp có tùy chọn vùng chứa bên ngoài .Khi nó được đặt thành true, nó không phải lúc nào cũng tạo ra âm lượng. Đây là một ví dụ.
version: '2'
services:
dbdata:
image: postgres:9.5.2
volumes:
- mypostgresdb:/var/lib/postgresql/data
volumes:
mypostgresdb:
external: true
Với external: true
, docker -omp sẽ không tạo mypostgredb
âm lượng, vì vậy bạn phải tạo nó bằng cách sử dụng lệnh sau:
docker volume create --name=mypostgredb
Dữ liệu của postgresql sẽ được lưu vào tập tin docker có tên mypostgredb
. Đọc tham chiếu
để biết thêm chi tiết.