2015-05-11 17 views

Trả lời

9

Sử dụng lệnh sau đây vào một thiết bị đầu cuối UNIX:

docker exec <container_name> pg_dump <schema_name> > backup 

Lệnh sau sẽ đổ chỉ chèn từ tất cả các bảng:

phương pháp
docker exec <container_name> pg_dump --column-inserts --data-only <schema_name> inserts.sql 
+2

nơi bạn chỉ định người dùng và mật khẩu của người dùng? – VaTo

1

workaround khác là để bắt đầu sql postgre với một mountpoint để vị trí của bãi chứa trong docker.

như docker run -v <location of the files>. Sau đó thực hiện một Docker kiểm tra trên Docker chạy chứa

docker inspect <image_id> 

bạn có thể tìm thấy "Khối lượng" tag bên trong và một location.Go tương ứng với vị trí và bạn có thể tìm thấy tất cả các postgresql/mysql files.It làm việc cho tôi Cho chúng tôi biết nếu điều đó có hiệu quả với bạn không.

Chúc may mắn

3

Tôi đã chứa tên postgres với khối lượng gắn -v /backups:/backups

Để sao lưu gziped DB my_db tôi sử dụng:

docker exec postgres pg_dump -U postgres -F t my_db | gzip >/backups/my_db-$(date +%Y-%m-%d).tar.gz 

Bây giờ tôi có

[email protected]:/backups$ ls 
my_db-2016-11-30.tar.gz 
+0

Tôi nhận được 'không có tệp hoặc thư mục như vậy:/backups/my_db-2017-03-19.tar.gz', bạn có ý tưởng tại sao không? – drskullster

+0

Tôi quản lý để làm việc xung quanh nó với 'docker exec -t postgres bash -c 'pg_dump -U postgres -F t my_db | gzip>/backups/my_db - $ (ngày +% Y-% m-% d) .tar.gz'' – drskullster

+0

Có thể bạn không có/sao lưu dir và/hoặc nó không được gắn kết? – Jekis

0

Mặc dù giải pháp mountpoint trên nhìn đầy hứa hẹn, sau đây là giải pháp duy nhất làm việc cho tôi sau nhiều lần lặp đi lặp lại:

docker run -it -e PGPASSWORD=my_password postgres:alpine pg_dump -h hostname -U my_user my_db > backup.sql 

gì là duy nhất trong trường hợp của tôi: Tôi có một mật khẩu trên cơ sở dữ liệu mà cần phải được thông qua trong; cần thiết để chuyển vào thẻ (alpine); và cuối cùng phiên bản máy chủ của các công cụ psql khác với các phiên bản docker.

Các vấn đề liên quan