簡體   English   中英

Docker備份和還原Postgres

[英]Docker Backup and restore postgres

我使用docker postgres:9.4圖片。 我需要知道如何備份和還原僅卷容器。

創建的卷容器:

docker run -v /var/lib/postgresql/data --name dbdata postgres:9.4 /bin/true

使用音量

docker run --name=postgres --volumes-from=dbdata -d -p 6432:5432 postgres:9.4

備份卷容器

docker run --volumes-from dbdata -v $(pwd):/backup postgres:9.4 tar cvf /backup/backup.tar /var/lib/postgresql/data

恢復新容器中的音量

docker run --name=dbdata-new --volumes-from dbdata -v $(pwd):/backup ubuntu:14.04 /bin/sh -c 'cd /var/lib/postgresql/data && tar xvf /backup/backup.tar'

在新卷中用於創建新的postgres容器:

docker run --name=postgres-new --volumes-from=dbdata-new -d -p 7532:5432 postgres:9.4

問題: 運行新容器時,日志中出現以下錯誤。

initdb:目錄“ / var / lib / postgresql / data”存在但不為空如果要創建新的數據庫系統,請刪除或清空目錄“ / var / lib / postgresql / data”,或使用參數運行initdb除了“ / var / lib / postgresql / data”

不知道我在做什么錯。 有人可以指出我在哪里犯錯。

遵循非常簡單的數據(一個記錄一個表一個新的數據庫)的步驟,無法輕易重現該問題:

psql -U postgres -h $(boot2docker ip || echo 'localhost') -p 6432 -c "CREATE DATABASE ttt;"
psql -U postgres -h $(boot2docker ip || echo 'localhost') -p 6432 -d ttt -c "CREATE table a(b int); insert into a(b) values(1);"
psql -U postgres -h $(boot2docker ip || echo 'localhost') -p 6432 -d ttt -c "select * from a;"

當我啟動postgres-new ,日志中沒有異常,並且數據似乎在那里:

$ psql -U postgres -h $(boot2docker ip || echo 'localhost') -p 7532 -d ttt -c "select * from a;"
 b
---
 1
(1 row)

從dbdata -v $ {pwd}:/ backup ubuntu:14.04 / bin / sh -c'cd / var / lib / postgresql / data && tar xvf /backup/backup.tar '

問題是粗體字。 通過解壓縮文件夾/ var / lib / postgresql / data中的備份,tar命令正在上述文件夾中創建/ var / lib / postgresql / data。

感謝您對MyKola的所有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM