我使用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容器才能执行此功能并将备份目录挂载到主机。
一种方法比另一方更好/更好吗?
答案 0 :(得分:39)
要运行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)。
答案 1 :(得分:0)
我只是提交运行数据库的容器。然后,我将该新映像推送到我的私人注册表中。无论应用程序或数据库发生什么情况,我都可以随时将其从注册表中拉出并立即安装。
docker commit [container-name] [domain:port/'new-image-name']
然后,我将图像推送到注册表中。
docker push [new-image-name]
如果我需要恢复该数据库,只需将其从自己的注册表中拉出即可。
docker pull [domain:port/'new-image-name']
因此,为了澄清一下,这是: [domain:port /'new-image-name']
应如下所示: myregistrydomain.com:5000/dbSep
答案 2 :(得分:0)
自从有了
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
</head>
<body>
<table>
<tbody>
<tr>
<td></td>
<td colspan="100" class="table_title_top">
<div>Title Top Title Top</div>
</td>
</tr>
<tr class="calc-tr calc-tr-title">
<td rowspan="100" class="table_title_left">
<div>Title Left Title Left</div>
</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
</tbody>
</table>
</body>
</html>
您可以运行
expose:
- "5432"
pg_dump将连接到5432端口进行转储,因为容器中的postgres使它丢失了,您将从容器中转储db