【问题标题】:docker volumes in dockerfilesdockerfiles 中的 docker 卷
【发布时间】:2020-12-16 18:38:41
【问题描述】:

我想在 docker 容器中运行我的云,并将容器外的数据存储在一个卷中。这样当我的容器被销毁或移除时,数据仍然是持久的。

docker container run -v /path/to/src:/path/to/target imageName:tag 传递音量参数时,它运行良好,没有任何问题。

如何将 srctarget 目标传递到 dockerfile?

VOLUME /path/to/target 将创建一个卷,该卷的源位于 var/lib/docker 的某个位置,这是我不想要的。

【问题讨论】:

标签: docker dockerfile containers volume


【解决方案1】:

简短回答:你不能。

长答案:您在这里尝试做的基本上是反对图像的可移植性。 Docker 文档明确指出这是不可能的,如下所示:https://docs.docker.com/engine/reference/builder/

“主机目录是在容器运行时声明的:主机目录(挂载点)本质上是依赖于主机的。这是为了保持图像的可移植性,因为不能保证给定的主机目录在所有主机上都可用。因此,您无法从 Dockerfile 中挂载主机目录。VOLUME 指令不支持指定 host-dir 参数。您必须在创建或运行容器时指定挂载点。

【讨论】:

  • 当我应该开始更仔细地阅读文档:(非常感谢!可移植性是一个不错的论点。尽管他们仍然可以创建该选项。
  • docker-compose 可能会处理很多你想要的东西。您可以以“build ”而不是图像为目标,或者一旦您拥有构建的图像,您就可以在 compose.xml 中指定一个卷。如果您正在编排,那么它将取决于您在那里使用的内容,但每个选项都应该在某处有某种卷脚本!
  • 您是在谈论带有撰写文件内容的主机卷吗?这听起来很有希望。我正在学习 docker 并且“还没有”,因为我想一步一步地去。我会期待的!
  • 我发现 Docker 文档非常密集,但总而言之,在构建映像之后,您可以使用 compose 文件来创建容器。在该撰写文件(例如 docker-compose.yml)中,您可以使用 src:dest 方法指定卷。强烈建议您在熟悉 Docker 后进入 docker-compose。
【解决方案2】:

听起来您想要容器中的默认文件,您可以使用 COPY 指令将文件从本地计算机复制到容器映像中,将其放置在容器中。然后可以使用-v 参数覆盖您放置文件的目录,以便在您启动/运行容器时将目录安装替换为本地主机:

例如

COPY ./files/source/swagger.json /application/resources/destination/swagger.json

更多信息请参见Docker mount to folder overriding content

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-02
    • 2018-11-28
    • 2019-04-12
    • 2015-10-01
    • 2020-08-07
    相关资源
    最近更新 更多