【发布时间】:2016-04-18 20:00:25
【问题描述】:
我有(拥有)一个数据容器,其中包含其他容器使用的卷(--volumes-from)。
数据容器被意外删除了。
谢天谢地,该卷没有被删除。
有什么方法可以重新运行数据容器并将其指向此卷?
【问题讨论】:
标签: docker containers data-containers docker-volume
我有(拥有)一个数据容器,其中包含其他容器使用的卷(--volumes-from)。
数据容器被意外删除了。
谢天谢地,该卷没有被删除。
有什么方法可以重新运行数据容器并将其指向此卷?
【问题讨论】:
标签: docker containers data-containers docker-volume
不完全确定,但你可以试试
docker run -i -t --volumes-from yourvolume ubuntu /bin/bash
我认为你应该能够访问该目录。
【讨论】:
有什么方法可以重新运行数据容器并将其指向此卷?
当然,我在“How to recover data from a deleted Docker container? How to reconnect it to the data?”中详细说明了它
您需要创建一个具有相同 VOLUME 的新容器(但 its path /var/lib/docker/volumes/... 将为空或带有初始内容)
然后您将旧卷移动到新容器的卷的路径。
更一般地说,每当我启动一个数据卷容器时,I register its volume path in a file(如果我的容器被意外删除,以后可以重用该路径)
【讨论】:
当我提出这个问题时,我主要担心的是数据丢失。以下是我如何将数据从卷复制到 AWS S3:
# Create a dummy container - I like Python
host$ docker run -it -v my_volume:/datavolume1 python:3.7-slim bash
# Prepare AWS stuff
# executing 'cat ~/.aws/credentials' on your development machine
# will likely show them
python:3.7-slim$ pip install awscli
python:3.7-slim$ export AWS_ACCESS_KEY_ID=yourkeyid
python:3.7-slim$ export AWS_SECRET_ACCESS_KEY=yoursecrectaccesskey
# Copy
python:3.7-slim$ aws s3 cp /datavolume1/thefile.zip s3://bucket/key/thefile.zip
您也可以使用aws s3 sync。
我的具体例子是关于 MySQL / MariaDB。如果要备份 MySQL/MariaDB 的数据库,直接执行
$ mysqldump -u [username] -p [database_name] \
--single-transaction --quick --lock-tables=false \
> db1-backup-$(date +%F).sql
你也可以考虑
--skip-add-drop-table:如果表已经存在,则跳过创建表。如果没有这个标志,表就会被删除。--complete-insert:添加列名。如果没有此标志,则可能存在列不匹配。要恢复备份:
$ mysql -u [username] -p [database_name] < [filename].sql
【讨论】: