5

我有(拥有)一个数据容器,该容器具有其他容器使用的卷(--volumes-from)。

数据容器被意外删除。

谢天谢地,该卷没有被删除。

有什么办法可以重新运行数据容器并将其指向此卷?

4

3 回答 3

3

有什么方法可以重新运行数据容器并将其指向该卷?

当然,我在“如何从已删除的 Docker 容器中恢复数据?如何将其重新连接到数据? ”中详细说明了它。

您需要创建一个具有相同 VOLUME 的新容器(但其路径 /var/lib/docker/volumes/...为空或具有初始内容)

然后将旧卷移动到新容器的卷的路径。

更一般地说,每当我启动一个数据卷容器时,我都会在一个文件中注册它的卷路径(如果我的容器被意外删除,以后可以重用该路径)

于 2016-01-13T19:25:55.887 回答
1

不完全确定,但你可以试试

docker run -i -t --volumes-from yourvolume ubuntu /bin/bash

我认为,您应该能够访问该目录。

于 2016-01-13T17:54:26.203 回答
1

当我提出这个问题时,我主要担心的是数据丢失。以下是我将数据从卷复制到 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。如果要备份 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
于 2019-06-14T20:12:46.190 回答