【问题标题】:Docker - How to access a volume not attached to a container?Docker - 如何访问未附加到容器的卷?
【发布时间】:2016-04-18 20:00:25
【问题描述】:

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

数据容器被意外删除了。

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

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

【问题讨论】:

    标签: docker containers data-containers docker-volume


    【解决方案1】:

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

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

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

    【讨论】:

    • 只要您还有“yourvolume”,我相信使用 --volumes-from 启动任何其他容器都应该重新连接。
    • 我还有卷,但没有创建它的容器。而--volumes-from的值就是容器名,已经不存在了……
    • 恐怕我没有什么专业知识,只是自己设法掌握了卷。我不太确定你的意思是你仍然有音量。发布您的 docker ps -a 输出可能会帮助其他人确定您可以做什么。
    • 当您创建、构建和运行带有外部卷(写入主机的数据)的 docker 容器时,您最终会得到一个“图像”、“容器”和“卷”。我已经删除了“图像”和“容器”,但“卷”仍然存在。问题是,一旦链接到“卷”的“容器”消失了,我看不到如何回到“卷”
    【解决方案2】:

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

    当然,我在“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(如果我的容器被意外删除,以后可以重用该路径)

    【讨论】:

    • 你是明星,听起来像是完美的解决方案。我现在唯一的问题是尝试找出那台机器上的 50 卷中的哪卷是我需要的!!完成后,我将使用您的方法来跟踪使用中的音量。干杯,米
    【解决方案3】:

    当我提出这个问题时,我主要担心的是数据丢失。以下是我如何将数据从卷复制到 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
    

    【讨论】:

      猜你喜欢
      • 2016-05-18
      • 1970-01-01
      • 1970-01-01
      • 2019-07-27
      • 1970-01-01
      • 2019-12-18
      • 2016-10-31
      • 2015-04-02
      • 1970-01-01
      相关资源
      最近更新 更多