我正在码头程序窗口工具包上运行 mariadb 实例。我使用风筝在 mariaDB 容器上进行了一个可取的更改。现在,它重新创建了一个实例,丢失了我所有的数据库。有没有办法从中恢复过来?
检查是否存在悬空卷,并且数量很少
docker音量ls -f悬空=真
最近,我不得不面对丢失的wordpress容器的相同问题,并且我遵循了Don的指示。但是,由于有很多悬而未决的体积,我必须优化流程。我已经设法在同一终端中更简单地完成它,从而产生了以下步骤:
docker volume ls -f dangling=true
DRIVER VOLUME NAME
local 43277666c8bc3da0b585d90952c2303226c92c6c6a561007c0c7ee00b6da817e
local 4fde3ea412e54a1b8b42fce6dae5de5135b9fd12933b020b43bd482cd5fd2225
local 52074ccfd62fb83b8b40cff5f8024215b34f79ad09b630e067ec732f811f798c
...
然后,对每个容器执行以下指令,将43277666c8bc3d…
替换为找到的每个VOLUME NAME。此指令将删除以前的maria-Recovery
容器(如果存在),创建一个新容器并附加到它:
docker container ls -a -q --filter "name=maria-restore" && docker container rm -f maria-restore; docker run --name maria-restore -v 43277666c8bc3da0b585d90952c2303226c92c6c6a561007c0c7ee00b6da817e:/var/lib/mysql -d mariadb:10.4.12 mysqld --innodb-flush-method=littlesync --innodb-use-native-aio=ON --log_bin=ON && docker exec -it maria-restore bash
如果它不是mysql卷,它将失败并立即退出。如果是mysql卷,您将位于mariadb容器中。数据库将已经启动。然后,您可以连接到数据库,查看它是否是正确的,并对其进行备份:
root@8b35c8e2c474:/# mysql -uadmin -p
root@8b35c8e2c474:/# mysqldump -uadmin -p --all-databases > alldb.sql
root@8b35c8e2c474:/# exit
复制备份的数据库:
docker cp mysql-restore:/alldb.sql .
最后,您必须清理 maria 还原
容器:
docker container ls -a -q --filter "name=maria-restore" && docker container rm -f maria-restore
使用悬空卷恢复数据。方法如下。
首先获取悬挂卷的列表。
$ docker volume ls -f dangling=true
DRIVER VOLUME NAME
local 6f79b6329d98379495a284287e32a7a57605483dd7bf7fa19924fb2a98fb1d19
local 47bb077ef6f6df9f56bd30c35eeb45f35e62213d2c50db6f078bfdeeee6698ec
然后将它安装到一个Ubuntu容器上(这样你就可以进入目录并检查那里有什么,因为当你在windows上使用Docker Tool Box时没有其他方法可以做到这一点)
$ docker run --name tempContainer1-UBUNTU -v 6f79b6329d98379495a284287e32a7a57605483dd7bf7fa19924fb2a98fb1d19:/var/lib/backup -t -i ubuntu /bin/bash
然后您将进入新创建的contianer的bash。转到新安装的目录并检查内容
$cd /var/lib/backup
$ls
$aria_log.00000001 aria_log_control ib_buffer_pool ib_logfile0 ib_logfile1 ibdata1 ibtmp1 multi-master.info mysql performance_schema
-- once you are sure directory data is what you require, make a zip file of the folder
$apt-get update
$apt-get install zip
$cd ..
$zip -r backup.zip backup
在另一个终端上,从主机复制容器备份的内容.zip到主机
$docker cp tempContainer1-UBUNTU:/var/lib/backup.zip .
然后创建一个docker合成文件,如下所示,并安装备份文件夹作为数据目录。在linux主机上运行这个,因为这个挂载对于windows上的mysql不会像预期的那样工作。
version: "3.2"
services:
mysql:
image: mariadb:10.4.12
restart: always
ports:
- "3306:3306"
command: mysqld --innodb-flush-method=littlesync --innodb-use-native-aio=ON --log_bin=ON
volumes:
- ./backup_data_folder:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: somepassword
TZ: Asia/Singapore
networks:
- frontend
container_name: maria
networks:
frontend:
开始
$docker-compose up
一旦启动,从另一个终端进入新创建的容器
$docker exec -t -i maria /bin/bash
-- Take dump of all the DBS
$mysqldump -u root -p --all-databases > alldb.sql
从主机的另一个终端将转储的内容复制到主机
$docker cp maria:/alldb.sql .
现在这个sql文件是一个完整的转储,在mysql DB或contianer上恢复它。
mysql -u root -p < alldb.sql
我正在尝试使用Flask和Docker开发一个小型音乐应用程序。我有两个码头服务,都在经营烧瓶。 第一个称为上传器: 第二个渲染了一个Jinja模板,该模板试图播放此API返回的文件: 另外,这些组件工作正常。但当一起使用时,文件不会播放。我已经尝试了我在网上找到的几乎所有东西,但似乎都不起作用。任何帮助将不胜感激。谢谢! 编辑:添加了泊动器撰写文件。两个泊坞窗映像都是在本地构建的。
我尝试通过挂载在docker容器中运行一些Qt应用程序。我在这里看到这可能很难。 所以当我在docker容器中运行kdevelop时,它不工作(我得到一个空窗口)。但是如果我运行qtcreator,就没问题了。 我觉得区别是因为用的Qt版本(kdevelop用Qt4开发,qtcreator用Qt5)。我的所有其他Qt5应用程序都运行良好,但没有一个Qt4应用程序。 问题: 有没有人知道如何启动Qt
我正在开发一个服务,并使用docker compose来旋转服务,如postgres,redis,elasticsearch。我有一个基于RubyOnRails的web应用程序,可以读写所有这些服务。 这是我的docker-compose.yml 我可以ping这个网络中的容器 到目前为止一切顺利。现在,我想在我的主机上运行ruby on rails应用程序,但是能够使用类似< code > Po
我有一个关于使用docker容器的最佳实践的问题。 我需要为我开发的每个应用程序一个数据库。现在我的问题是,我是应该使用一个包含多个数据库的mysql docker实例,还是应该为每个数据库创建一个实例。我认为为每个数据库创建一个实例的缺点是,我不能让一个用户访问所有数据库。我知道这是出于安全原因,但当我尝试从客户端备份时,我需要在每个实例中进行备份。多个实例使用的资源开销不是很大吗(虽然mysq
因此,我使用boto3 s3和python脚本来列出bucket。 s3_client = boto3.client('s3 ') 当我在桌面上运行它时,它可以正常工作,因为我使用aws配置命令设置aws_access_key_id和aws_secret_access_key。 当我在 AWS 上将其作为容器运行时,我是否需要在使用aws_access_key_id的环境变量和aws_secret
我安装了cron和 登录docker镜像 没有正在运行 我想我必须做点什么来启动cron服务器。 我怎么能这样做??