docker - 在 docker-compose down 之前备份 Mysql DB

标签 docker docker-compose

我有 MySQL 备份容器,它每 1 小时进行一次数据库备份,但我只需要在 docker-compose down 之前进行备份.有可能吗?据我了解,这应该是某种钩子(Hook)“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

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

最佳答案

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

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

关于docker - 在 docker-compose down 之前备份 Mysql DB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50317885/

相关文章:

azure - 设备未报告 IoT Edge 自定义模块

postgresql - Docker:Springboot容器无法连接到PostgreSql容器连接错误

docker - 错误 : Get https://registry-1. docker.io/v2/: net/http: Docker 中的 TLS 握手超时

postgresql - 如何以非root用户身份在docker中运行postgres?

azure - :( Application Error when trying to deploy docker-compose app in azure app service

ruby-on-rails - 错误 : Postgres database import in docker container

mysql - docker 组成 : spring boot connection to mysql database refused

docker - Docker-compose yaml.scanner.ScannerError:此处不允许映射值

docker daemon 启动失败 : inotify_add_watch: no such file or directory

github - Docker : Could not resolve host: github. com - for go get ./