【问题标题】:Backup Mysql DB before docker-compose down在 docker-compose down 之前备份 Mysql DB
【发布时间】:2018-05-13 15:46:51
【问题描述】:

我有 MySQL 备份容器,它每 1 小时进行一次数据库备份,但我只需要在 docker-compose down 之前进行备份。有可能吗?据我了解,这应该是某种钩子“Before Down”“After Start”。

我想使用这样的东西,但这应该在容器关闭之前自动完成:

docker exec MYSQL_CONTAINER_ID /usr/bin/mysqldump -u root --password=root DATABASE > backup.sql

更新

到目前为止,我所做的是在我拥有的这个脚本中创建了 down.sh 脚本:

#!/bin/bash

CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

docker exec test1-mysql sh -c 'exec mysqldump --databases local -uroot -p"$MYSQL_ROOT_PASSWORD"' > "$CURRENT_DIR/docker/data/backup/local.sql"

docker-compose down

Seams 对我来说是合法的,我需要弄清楚如何将 mysql 容器名称作为变量传递给这个脚本。这里的容器名称是 test1-mysql。我想从 docker-compose.yml 中获取这个值。有什么想法吗?

【问题讨论】:

    标签: docker docker-compose


    【解决方案1】:

    借自帖子How to execute a script when I terminate a docker container

    TL;DR: docker stop 向容器的 ENTRYPOINT pid 发送一个 SIGTERM。您可以修改您的 ENTRYPOINT 脚本以捕获 SIGTERM,然后进行备份或其他清理工作。

    【讨论】:

    • 没有真正明白。如果我使用 docker-compose
    • 它不应该有任何区别,因为 docker-compose 正在利用底层 docker 命令。根据您的描述,您有一个现有的备份容器。需要修改该容器的 ENTRYPOINT 脚本以捕获 SIGTERM 并进行备份。您需要访问构建映像的 Docker 文件,以便您可以修改它。
    • 好的,但是那篇文章没有解释如何在容器停止之前运行某些东西。它只是解释了容器是如何停止的。它没有解释如何在 docker-compose 中定义入口脚本来备份数据库,因为我需要在容器内运行备份,我找不到这个简单任务的任何配置示例。
    • 这个用于 mysql github.com/dockerfile/mysql/blob/master/Dockerfile#L30 的 Dockerfile 将 'mysqld_safe' 作为默认进程运行。这个想法是您将用一个脚本替换它,该脚本 1) 为上次备份定义 SIGTERM 陷阱逻辑,2) 运行 'mysqld_safe' 。然后,您将使用 docker build 构建映像,然后使用 docker-compose.yaml 引用它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多