Tôi mới làm quen với docker và phát triển một dự án bằng cách sử dụng docker compose. Từ các tài liệu hướng dẫn tôi đã học được rằng tôi nên sử dụng dữ liệu chỉ container để giữ cho dữ liệu vẫn tồn tại nhưng tôi không thể làm như vậy bằng cách sử dụng docker-compose. Bất cứ khi nào tôi làm docker-compose down
, nó sẽ xóa dữ liệu khỏi db nhưng bằng cách thực hiện docker-compose stop
dữ liệu sẽ không bị xóa. Có thể là vì tôi không tạo ra khối lượng dữ liệu được đặt tên và docker-compose down
hầu như không xóa tất cả các vùng chứa. Vì vậy, tôi đã thử đặt tên cho vùng chứa nhưng nó đã ném cho tôi lỗi. hãy có một cái nhìn tại tập tin yml
tôi:Soạn thảo Docker - Cách lưu dữ liệu cơ sở dữ liệu?
version: '2'
services:
data_container:
build: ./data
#volumes:
# - dataVolume:/data
db:
build: ./db
ports:
- "5445:5432"
environment:
- POSTGRES_USER=postgres
- POSTGRES_DB=postgres
# - PGDATA=/var/lib/postgresql/data/pgdata
volumes_from:
# - container:db_bus
- data_container
geoserver:
build: ./geoserver
depends_on:
- db
ports:
- "8004:8080"
volumes:
- ./geoserver/data:/opt/geoserverdata_dir
web:
build: ./web
volumes:
- ./web:/code
ports:
- "8000:8000"
depends_on:
- db
command: python manage.py runserver 0.0.0.0:8000
nginx:
build: ./nginx
ports:
- "83:80"
depends_on:
- web
nộp Các Docker cho data_container là:
FROM stackbrew/busybox:latest
MAINTAINER Tom Offermann <[email protected]>
# Create data directory
RUN mkdir /data
# Create /data volume
VOLUME /data
tôi đã cố gắng này, nhưng bằng cách làm Docker-soạn xuống, dữ liệu bị mất. Tôi đã cố gắng đặt tên cho các data_container như bạn sẽ nhìn thấy dòng nhận xét, nó ném tôi lỗi này:
ERROR: Named volume "dataVolume:/data:rw" is used in service "data_container" but no declaration was found in the volumes section.
Vì vậy, ngay bây giờ những gì tôi đang làm là tôi đã tạo ra một lập trường dữ liệu riêng chỉ tên container và đưa rằng trong giá trị volumes_from
của db. Nó hoạt động tốt và không xóa bất kỳ dữ liệu nào ngay cả sau khi thực hiện docker-compose down
.
Truy vấn của tôi:
phương pháp tốt nhất để làm cho container có thể lưu trữ dữ liệu cơ sở dữ liệu bằng cách sử dụng các
docker-compose
và sử dụng chúng đúng cách là gì?Ý thức của tôi không đồng ý với tôi về cách tiếp cận mà tôi đã chọn, phương pháp đó bằng cách tạo vùng chứa dữ liệu độc lập. Có suy nghĩ gì không?
Có một lý do bạn không muốn sử dụng một khối lượng đặt tên cho dữ liệu của bạn, như 'lượng: -/data/mydata:/var/lib/postgresql/data/pgdata' là phương thức được ưu tiên hơn khối lượng vùng chứa dữ liệu. – ldg
Tôi đã thử làm điều này và nó ném cho tôi lỗi: 'LRI: Dữ liệu được đặt tên" Dữ liệuVolume:/data: rw "được sử dụng trong dịch vụ" data_container "nhưng không có khai báo nào được tìm thấy trong phần khối lượng.' Tôi cũng tò mò về tính di động của dữ liệu sử dụng phương pháp này. –