首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在docker中备份数据库

如何在docker中备份数据库
EN

Stack Overflow用户
提问于 2016-08-29 23:48:59
回答 2查看 26.1K关注 0票数 21

我正在使用docker-compose和以下yml文件运行我的应用程序

代码语言:javascript
复制
  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状态。

根据官方文档,我可以备份卷,如下所示

代码语言:javascript
复制
docker run --rm --volumes postgresdata:/var/lib/postgresql/data -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata

其他一些教程建议我使用postgres提供的pg-dump函数进行备份。

代码语言:javascript
复制
pg_dump -Fc database_name_here > database.bak

我想我必须进入postgres容器来执行这个功能,并将备份目录挂载到主机上。

其中一种方法比另一种更好/更可取吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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)。

docker exec

docker-compose exec

pg_restore

票数 56
EN

Stack Overflow用户

发布于 2019-04-25 20:54:50

因为你有

代码语言:javascript
复制
expose:     
 - "5432"

你可以运行

代码语言:javascript
复制
pg_dump -U <user> -h localhost -Fc <db_name> > 1.dump

pg_dump连接到5432端口进行转储因为它被容器中的postgres侦听您将转储容器中的db

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39210274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档