根据伊拉克利的回答,这里有一个更新的解决方案:
- 使用更新的版本2 Docker Compose文件
- 分开
volumes
节
- 额外设置已删除
docker-compose.yml
version: '2'
services:
postgres9:
image: postgres:9.4
expose:
- 5432
volumes:
- data:/var/lib/postgresql/data
volumes:
data: {}
demo
启动Postgres数据库服务器:
$ docker-compose up
显示数据库中的所有表.在另一个 docker ,与集装箱的postman 交谈:
$ 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数据库,并判断了它是否保证了我们的数据安全可靠.
storing data
首先,进行备份,将数据存储在主机上:
$ 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容器中.
Note:使用"exec-i",not"-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 privileges
Schema | Name | Type | Access privileges | Column access privileges
--------+-----------+-------+-------------------+--------------------------
public | beer | table | |
总之,我们已经验证了我们可以启动一个数据库,数据在重启后仍然存在,并且我们可以从主机将备份恢复到数据库中.
谢谢托马兹!