如何在docker图像中“取消声明”卷?

时间:2014-10-11 14:27:35

标签: mysql docker

我正在编写一个Dockerfile来设置用于测试Web应用程序的映像。我基于tutum / lamp图像(https://github.com/tutumcloud/tutum-docker-lamp/blob/master/Dockerfile),因为这似乎是一个很好的基础。

作为我的dockerfile的一部分,我想创建一个mysql数据库并在其中设置一些东西。但是,tutum / lamp图像声明VOLUME ["/etc/mysql", "/var/lib/mysql" ],所以如果我理解正确,我在Dockerfile中对MySQL数据库所做的任何更改都不会保留。

  • 我理解正确吗?

如果是,

  • 有没有办法“取消声明”这些卷,以便这些目录将像其他所有目录一样成为联合文件系统的一部分?

谢谢!

3 个答案:

答案 0 :(得分:6)

您无法真正取消声明卷,但您可以通过修改它的dockerfile来构建自己的原始图像版本。

答案 1 :(得分:3)

无法更改现有容器,因此您有两个选择:

  1. 选择Tutum容器并构建自己的变体
  2. 使用数据容器管理tutum容器的持久性。
  3. 数据容器

    创建一个用于创建数据卷引用的容器:

    docker run -it --name dbvol -v /var/lib/mysql ubuntu env
    

    然后可以在运行mysql数据库时使用它来保存数据:

    docker run -d --volumes-from dbvol -p 3306:3306 tutum/mysql:5.6
    

    只要" dbvol"数据一直存在。容器存在。它可以在任何阶段删除:

    docker rm dbvol
    

    参考:

答案 2 :(得分:0)

多年来这个问题空间一直没有变化,所以我创建了docker-copyedit作为解决方法,通过编辑下载图像的元数据来“取消声明”卷。