为了建立irakli的答案,这里有一个更新的解决方案:
- 使用较新的版本2 Docker Compose文件
- 单独的
volumes
部分 - 多余的设置已删除
docker-compose.yml
version: '2'services: postgres9: image: postgres:9.4 expose: - 5432 volumes: - data:/var/lib/postgresql/datavolumes: data: {}演示
启动Postgres数据库服务器:
$ docker-compose up
显示数据库中的所有表。在另一个终端中,与容器的Postgres交谈:
$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c 'z'
它不会显示任何内容,因为数据库为空白。创建一个表:
$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c 'create table beer()'
列出新创建的表:
$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c 'z' Access privileges Schema | Name | Type | Access privileges | Column access privileges --------+-----------+-------+-------------------+-------------------------- public | beer | table | |
好极了!现在,我们使用共享存储卷启动了一个Postgres数据库,并在其中存储了一些数据。下一步是检查服务器停止后数据是否仍然存在。
现在,杀死Postgres服务器容器:
$ docker-compose stop
再次启动Postgres容器:
$ docker-compose up
我们希望数据库服务器将重新使用存储,因此我们非常重要的数据仍然存在。校验:
$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c 'z' Access privileges Schema | Name | Type | Access privileges | Column access privileges --------+-----------+-------+-------------------+--------------------------public | beer | table | |
我们已经成功地使用新型Docker Compose文件使用外部数据量运行Postgres数据库,并检查了它是否确保我们的数据安全可靠。
储存资料
首先,进行备份,将我们的数据存储在主机上:
$ docker exec -it $(docker-compose ps -q postgres9 ) pg_dump -Upostgres > backup.sql
修改来宾数据库中的数据:
$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c 'drop table beer'
将我们的备份(存储在主机上)还原到Postgres容器中。
注意: 使用“ exec -i” 而不是 “ -it”,否则将出现“输入设备不是TTY”错误。
$ docker exec -i $(docker-compose ps -q postgres9 ) psql -Upostgres < backup.sql
列出表以验证还原是否有效:
$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c 'z' Access privilegesSchema | Name | Type | Access privileges | Column access privileges --------+-----------+-------+-------------------+--------------------------public | beer | table | |
总结起来,我们已经验证了可以启动数据库,重新启动后数据仍然存在,并且可以从主机将备份还原到该数据库中。
谢谢托马斯!



