一个mariadb/mysql停靠容器正在运行。我想从主机恢复sql转储。
docker exec -i container_name \
/bin/sh -c 'exec mysql -uroot -psecret' \
< gunzip -c backup.sql.gz备份文件存在。但我知道这个错误:
-bash: gunzip:没有这样的文件或目录
发布于 2019-10-29 12:46:55
本地shell在读取此命令时第一次通过。它看到重定向< gunzip,并尝试在当前目录中打开一个名为gunzip的本地文件,并将其用作docker exec命令的标准输入。当该文件不存在时,您将得到所看到的错误。
你在找的是壳管道,而不是重定向
gunzip -c backup.sql.gz \
| mysql -h127.0.0.1 -uroot -psecret这需要在主机上安装MySQL命令行工具,但这与处理任何非特定的本地MySQL安装的方式相同。
如果您真的想通过docker exec执行此操作,则应用相同的基本布局。
gunzip -c backup.sql.gz \
| sudo docker exec container_name \
mysql -uroot -psecret发布于 2019-10-29 12:24:13
我不建议使用docker exec命令进行还原,这是将转储文件放到docker映像中的最佳方法,如果它很小,或者将转储文件挂载到/docker-entrypoint-initdb.d。
因此,将其添加到您的Dockerfile中,您将需要在容器打开后运行这些命令,
FROM mariadb
COPY backup.sql.gz /docker-entrypoint-initdb.d因此,当您启动容器时,它将自动填充。
第二,您也可以使用主机绑定卷。
docker run -v $PWD/backup.sql.gz:/docker-entrypoint-initdb.d/ -it mariadb初始化新实例
当容器首次启动时,将创建具有指定名称的新数据库,并使用提供的配置变量进行初始化。此外,它将执行在
.sh, .sql and .sql.gz中找到的扩展名为/docker-entrypoint-initdb.d的文件。文件将按字母顺序执行。您可以通过将SQL转储安装到该目录并提供包含贡献数据的自定义映像来轻松填充mariadb服务。默认情况下,SQL文件将导入到MYSQL_DATABASE变量指定的数据库中。
https://stackoverflow.com/questions/58607115
复制相似问题