如何从Docker容器创buildPostgres备份
我有一个Docker容器内运行的Postgres 9.5.4数据库。 我正在使用官方的Postgres镜像 ,我一直在尝试从我的数据库创build备份,但目前还没有运气。 根据docker文件,我期待以下命令将dump.tar文件存储在主机中的/ releases /文件夹中(在暂存器容器之外)
docker run -i --rm --link my_postgres:postgres --volume /releases/:/tmp/ postgres:latest pg_dumpall > /tmp/dump.tar
但是这会引发下面的错误:
pg_dumpall: could not connect to database "template1": could not connect to server: Connection refused Is the server running locally and accepting connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
任何想法可能是错的?
其实我find了解决办法
docker run -i --rm --link my_container:postgres -v /releases/:/tmp/ postgres:latest bash -c 'exec pg_dumpall -h "$POSTGRES_PORT_5432_TCP_ADDR" -p "$POSTGRES_PORT_5432_TCP_PORT" -U postgres > /tmp/my_backup.tar'
Docker参数在哪里:
- -i用于交互式进程,如shell,bash等
- –rm备份完成后删除容器
- –link将这个临时容器链接到my_container ,它包含当前正在运行的Postgres数据库。
- -v / releases /:/ tmp /创build共享卷。 容器中的文件夹/ tmp /中的内容(在本例中为my_backup.tar )将在主机中的文件夹/ releases /上自动可见。
和bash的参数:
- pg_dumpall将PostgreSQL集群导出到脚本文件中。
- -h“$ POSTGRES_PORT_5432_TCP_ADDR”获取Postgresvariables的IP地址。
- -p“$ POSTGRES_PORT_5432_TCP_PORT”从Postgresvariables中获取端口(这些variables仅在我们刚刚创build的时间容器中定义,因为与my_container的链接)
- -U连接到数据库的用户名