我是Docker的新手,我正在开发另一个开发人员编写的项目,该项目正在Digital Ocean Ubuntu 18.04 上运行。它由2个容器组成(1个容器用于Django App,1个容器用于PostgreSQL数据库)。
现在我需要获得数据库的备份,我找到了以前程序员编写的bash文件:
### Create a database backup.
###
### Usage:
### $ docker-compose -f <environment>.yml (exec |run --rm) postgres backup
set -o errexit
set -o pipefail
set -o nounset
working_dir="$(dirname ${0})"
source "${working_dir}/_sourced/constants.sh"
source "${working_dir}/_sourced/messages.sh"
message_welcome "Backing up the '${POSTGRES_DB}' database..."
if [[ "${POSTGRES_USER}" == "postgres" ]]; then
message_error "Backing up as 'postgres' user is not supported. Assign 'POSTGRES_USER' env with another one and try again."
exit 1
fi
export PGHOST="${POSTGRES_HOST}"
export PGPORT="${POSTGRES_PORT}"
export PGUSER="${POSTGRES_USER}"
export PGPASSWORD="${POSTGRES_PASSWORD}"
export PGDATABASE="${POSTGRES_DB}"
backup_filename="${BACKUP_FILE_PREFIX}_$(date +'%Y_%m_%dT%H_%M_%S').sql.gz"
pg_dump | gzip > "${BACKUP_DIR_PATH}/${backup_filename}"
message_success "'${POSTGRES_DB}' database backup '${backup_filename}' has been created and placed in '${BACKUP_DIR_PATH}'."
我的第一个问题是:
这个命令对吗?我的意思是如果我跑了:
docker-compose -f production.yml (exec |run --rm) postgres backup
会在书面位置为我的数据库创建备份吗?
第二个问题:我可以在数据库容器运行时运行此命令吗?还是我应该运行 docker-compose down ,然后运行命令进行备份,然后再次运行 docker-compose up 。
答案 0 :(得分:0)
确保您可以运行该脚本进行备份,一种实现方法是使用docker-compose exec db /bin/bash
在容器中执行Shell,然后运行该脚本。
其他方法是运行连接到postgres容器网络的新的postgres容器:
docker run -it --name pgback -v /path/backup/host:/var/lib/postgresql/data --network composeNetwork postgres /bin/bash
这将创建一个新的postgres容器,该容器连接到用compose创建的网络,并附加了绑定卷,然后您可以在容器中创建此脚本并将数据库备份到该卷,以将其保存到容器外的其他位置
然后,当您要备份简单的启动docker容器并备份时:
docker start -a -i pgback
您不需要创建其他撰写文件,只需将脚本复制到容器中并运行它,也可以使用该脚本创建一个新的postgres图像并从CMD运行它,仅用于运行容器,有很多方法去做。