【问题标题】:Docker volumes persistence after COPYCOPY 后的 Docker 卷持久性
【发布时间】:2016-03-16 22:37:38
【问题描述】:

我有一个 docker 映像,我在其中使用嵌入式 derby 持久性,如下所示:

COPY BatchDB /opt/ibm/wlp/usr/shared/resources/BatchDB
COPY derby /opt/ibm/wlp/usr/shared/resources/derby

文件夹 BatchDB 有一些运行时文件,这些文件也在映像构建时被复制。

我想使用 docker 卷来持久化 /opt/ibm/wlp/usr/shared/resources/BatchDB 目录,但是在运行容器时,如果我附加由 docker volume create --name dataVolume 在外部创建的 docker 卷,则容器在 BatchDB 文件夹中没有任何文件。

当我挂载一个卷时,我有什么方法可以在构建时存储文件吗?

【问题讨论】:

  • 挂载的卷具有优先权,因此您将看不到那里的原始文件。但是,您可以构建单独的映像 COPY BatchDB /opt/ibm/wlp/usr/shared/resources/BatchDBVOLUME /opt/ibm/wlp/usr/shared/resources/BatchDB。然后使用带有--volumes_from的卷
  • 你可以试试 Dockerfie 中的ONBUILD 选项吗?
  • 我知道它适用于 --volumes-from,但我只是想知道它是否适用于 docker volume api。
  • 我不知道 ONBUILD 是否可行。我以为它只是在您以我的图像作为基础图像构建新图像时执行
  • 你确定创建卷和容器后没有卷覆盖,你的数据不在/var/lib/docker/volumes/dataVolume/_data吗?让我推荐你使用 docker-compose 和命名卷(版本 3+)而不是 volumes_from,在版本 2 之后不推荐使用。

标签: docker docker-volume


【解决方案1】:

首先,为了防止由于这个问题而导致的其他可能错误,这个问题已经很老了,重要的是要知道,对于最近的版本,volumes-from 已被弃用。

因此,我建议您使用命名卷,但尽管您的数据在构建时使用 COPY 存储,但在您运行服务时其他容器可以访问卷中的数据。 即,如果您使用docker-compose 定义容器,则数据不在使用docker-compose 构建的卷目录中,而是docker-compose up / run

当你这样做时,你可以将它用作卷甚至作为绑定(附加到主机),检查/var/lib/docker/volumes/YOUR_NAMED_VOLUME_NAME/_data中的数据

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-13
    • 1970-01-01
    • 2021-12-28
    • 2018-04-19
    • 1970-01-01
    • 2019-06-02
    相关资源
    最近更新 更多