【问题标题】:Reattaching orphaned docker volumes重新附加孤立的 docker 卷
【发布时间】:2016-05-12 20:19:48
【问题描述】:

我正在使用在我的 dockerfile 中指定的 docker 卷,以便我的数据可以保留在主机上。 dockerfile 看起来像这样:

FROM base-image
VOLUME /path/to/something
RUN do_stuff
....

当我运行容器时,它会创建一个卷(称为 VolumeA),当我执行 docker volume ls 时可以看到它。

如果我停止并移除容器,VolumeA 会按预期保留。

我的问题是,如果我运行一个新版本的容器,有没有办法使用 VolumeA 而不是让它创建一个新版本?

【问题讨论】:

  • 这就是为什么你应该命名卷
  • 那么 dockerfile 中 VOLUME 的目的纯粹是为了在创建它的容器被删除后保留数据?没有办法在另一个容器中重复使用这些数据?
  • 你可以,但它不像命名卷那样简单。见stackoverflow.com/questions/26009619/…

标签: docker dockerfile


【解决方案1】:

我更喜欢使用命名卷,因为您可以轻松地将它们挂载到新容器中。

但是对于未命名的卷,我:

  • 运行我的容器(VOLUME 指令导致它创建一个新卷到一个新路径,您可以通过检查它获得)
  • 将旧卷的路径移动到新路径。

docker volume commandsI used to do thata script 之前:updateDataContainerPath.sh

但同样,这些天来,我的所有图像都没有 VOLUME:我创建了单独命名的卷 (docker volume create),并在运行时将它们挂载到容器中 (docker run -v my-named-volume:/my/path)

【讨论】:

  • 非常感谢。已从我的 dockerfile 中删除了 VOLUME 并现在在运行时使用 -v 对其进行管理。更好的解决方案。
【解决方案2】:

您可以在 docker run 命令中使用 -v 标志将现有卷绑定到新的 docker 容器

docker run -v VolumeA:/path/to/something [image]

还要查看--volumes-from 标志以挂载其他容器使用或创建的卷。

https://docs.docker.com/engine/reference/commandline/run/ https://docs.docker.com/engine/reference/commandline/volume_create/

【讨论】:

    猜你喜欢
    • 2015-03-04
    • 1970-01-01
    • 2015-09-04
    • 1970-01-01
    • 2019-03-21
    • 2014-07-31
    • 1970-01-01
    • 1970-01-01
    • 2016-04-18
    相关资源
    最近更新 更多