我正在按照这里的官方 docker 指南来备份 docker 卷。我也知道这个SO问题,但是我仍然遇到错误。运行以下命令:
docker run --rm --volumes-from dbstore -v $(pwd):/backup ny_db_1 tar cvf /backup/backup.tar /dbdata
无论我输入什么映像名称或容器名称或容器 ID,我都会收到以下错误:
Unable to find image 'ny_db_1:latest' locally
我要备份的卷:
$ docker volume ls
DRIVER VOLUME NAME
local ny_postgres_data
我的容器:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
39e71e660eda postgres:10.1-alpine "docker-entrypoint.s…" 4 days ago Up 23 minutes 0.0.0.0:5434->5433/tcp ny_db_1
如何备份我的卷?
更新:
我尝试了以下方法,但遇到了一个新错误:
$ docker run --rm --volumes-from 39e71e660eda -v $(pwd):/backup postgres:10.1-alpine tar:local cvf /backup/backup.tar /dbdata
/usr/local/bin/docker-entrypoint.sh: line 145: exec: tar:local: not found
>docker run
语法docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
-ny_db_1
是容器的名称,docker
将尝试使用不存在的IMAGE
"ny_db_1
",因此出现错误:"Unable to find image 'ny_db_1:latest' locally
"(如果未指定,则默认[:TAG]
latest
(。
--volumes-from
会将卷从指定容器装载到从IMAGE[:TAG]
生成的新容器中,例如:docker run --rm --volumes-from db -v $(pwd):/backup ubuntu:18.04 tar czvf /backup/backup.tar /dbdata
注意:如果您要备份PostgreSQL数据库,那么恕我直言,最好使用适当的工具来备份和还原数据库,例如:
使用pg_dumpall
进行备份:
docker run --rm
--name db-backup
--entrypoint pg_dumpall
--volume ${PWD}/backup:/backup
--volumes-from db
postgres:9 --host /var/run/postgresql --username postgres --clean --oids --file /backup/db.dump
使用psql
恢复:
docker run --rm -it
-v ${PWD}/backup:/restore
--name restore
postgres:10.1-alpine
docker exec restore psql
--host /var/run/postgresql
--username postgres
--file /restore/db.dump postgres
docker rename restore NEW_NAME
在这里尝试以下命令:
docker run -it --rm -v ny_postgres_data:/volume -v /tmp:/backup ny_db_1
tar -cjf /backup/ny_postgres_data -C /volume ./