我正在使用docker-compose和以下yml文件运行我的应用程序
postgres:
container_name: postgres
image: postgres:${POSTGRES_VERSION}
volumes:
- postgresdata:/var/lib/postgresql/data
expose:
- "5432"
environment:
- POSTGRES_DB=42EXP
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
node:
container_name: node
links:
- postgres:postgres
depends_on:
- postgres
volumes:
postgresdata:正如你在这里看到的,我正在使用一个named volume来管理postgres状态。
根据官方文档,我可以备份卷,如下所示
docker run --rm --volumes postgresdata:/var/lib/postgresql/data -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata其他一些教程建议我使用postgres提供的pg-dump函数进行备份。
pg_dump -Fc database_name_here > database.bak我想我必须进入postgres容器来执行这个功能,并将备份目录挂载到主机上。
其中一种方法比另一种更好/更可取吗?
发布于 2016-08-30 00:55:44
要运行pg_dump,可以使用docker exec命令:
要备份的:
docker exec -u <your_postgres_user> <postgres_container_name> pg_dump -Fc <database_name_here> > db.dump
删除db的(不要在生产环境中执行,仅用于测试目的!):
docker exec -u <your_postgres_user> <postgres_container_name> psql -c 'DROP DATABASE <your_db_name>'
要恢复的:
docker exec -i -u <your_postgres_user> <postgres_container_name> pg_restore -C -d postgres < db.dump
你也可以使用docker-compose来模拟exec。在这种情况下,您可以使用短服务名称(postgres)而不是完整的容器名称(composeproject_postgres)。
发布于 2019-04-25 20:54:50
因为你有
expose:
- "5432"你可以运行
pg_dump -U <user> -h localhost -Fc <db_name> > 1.dumppg_dump连接到5432端口进行转储因为它被容器中的postgres侦听您将转储容器中的db
https://stackoverflow.com/questions/39210274
复制相似问题