【问题标题】:How to specify source and target for a VOLUME in Dockerfile?如何在 Dockerfile 中为 VOLUME 指定源和目标?
【发布时间】:2017-11-24 17:42:31
【问题描述】:

我想在Dockerfile 中挂载VOLUME,同时指定source(主机)和destination(容器)路径。

这个操作可以用docker-compose.yml这样来完成:

volumes:
  - /path/source/on/host:/path/destination/on/container

如何使用 Dockerfile 做同样的事情?

【问题讨论】:

    标签: docker docker-compose dockerfile docker-volume


    【解决方案1】:

    您不能在指定源(主机)和目标(容器)路径的 Dockerfile 中挂载 VOLUME。

    这是因为这个想法不符合Docker镜像可移植和独立于主机的基本概念。

    【讨论】:

    • 好的,没关系。但我想知道为什么这个功能可以用 docker-compose 而不是 Dockerfile 来实现。我认为它应该是等效的,或者可能有一种方法可以做同样的事情。
    【解决方案2】:

    你可以使用的是参数

    -v /path/source/on/host:/path/destination/on/container
    

    当你运行你的容器时。

    对于一个正在运行的容器,第一步是提交你的容器

    docker commit <id> new container_name
    

    第二

    docker run -v /path/source/on/host:/path/destination/on/container container_name
    

    【讨论】:

    • 假设我使用“docker start ”运行容器。我该怎么做?使用“docker start -v /path/source/on/host:/path/destination/on/container”?
    【解决方案3】:

    来自文档

    docker run 命令使用基本映像中指定位置存在的任何数据初始化新创建的卷。例如,考虑以下 Dockerfile sn-p:

    FROM ubuntu
    RUN mkdir /myvol
    RUN echo "hello world" > /myvol/greeting
    VOLUME /myvol
    

    此 Dockerfile 生成一个映像,该映像导致 docker run 在 /myvol 创建一个新的挂载点,并将问候文件复制到新创建的卷中。该文件已从容器复制到卷。根本没有使用主机路径(即您正在运行 docker 的计算机上的位置)。

    需要牢记的几点

    Docker 卷在创建时可能不保存任何数据(如果与 docker volume create 隔离创建),但它们的“种子”数据最初来自对该卷具有写访问权限的容器,该容器复制其 destination在挂载时发送到source

    配置属性名称sourcedestination 对于绑定挂载总是有意义的,其中主机上已经存在一个位置,该位置在创建时被复制并注入到容器中,但它只对卷变得直观在初始数据播种发生之后 - 例如,如果您将现有卷挂载到对其具有只读访问权限的容器上,则没有源或目标。

    由于 Docker 管理卷的位置(因此在 Mac 上,它们的位置位于运行 Docker 的 Linux 虚拟机内 - 您不会通过浏览 Mac HD 找到它们)并认为它们主要用于持久化应用程序状态,它们在 Dockerfile 中的使用有很多限制,例如在 Windows 中,如果任何构建步骤在声明卷后更改了卷中的数据,这些更改将被丢弃。

    您可以从(即安装在)预先存在的容器中备份、恢复和迁移数据卷。有关更多信息,请参阅下面的文档。

    进一步阅读

    卷的一般介绍: https://docs.docker.com/storage/volumes/

    如何在 Dockerfile 中指定卷: https://docs.docker.com/engine/reference/builder/#volume

    如何在 compose.yaml 文件中指定卷: https://docs.docker.com/compose/compose-file/#volumes

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-12
      相关资源
      最近更新 更多