【问题标题】:How to get docker run to take the directory from the client machine to the host container?如何让 docker run 将目录从客户端机器带到主机容器?
【发布时间】:2017-03-18 11:28:21
【问题描述】:

我的目标是使用 docker 从我的 docker 客户端机器上的项目目录中使用 maven 编译一些代码。 (mvn compile 在 docker 容器中运行)。

假设我的 maven 映像名为 mvn-image,我的项目目录为 project-dir

如果我让 docker 主机与 docker 客户端在同一台机器上运行 - 那么我可以挂载一个类似于以下内容的卷:

mvn -v /projects/project-dir:/workdir -i mvn-image mvn compile

但这里有一个棘手的地方。我的 docker 客户端与主机位于不同的机器上。我试图不构建、推送和运行从我的项目目录构建的图像——我想要 docker one-liner 的便利。

我也知道我可以运行容器 - 并执行 cp 以获取其中的文件。但是这样一来,我仍然没有得到 docker-copy 挂载卷所需要的单线。

我的问题是:**如何让 docker run 将目录从客户端机器带到主机容器? **

【问题讨论】:

    标签: linux docker containers host mount


    【解决方案1】:

    发送本地数据并不是docker run 的真正功能。 docker builddocker importdocker cp 等其他命令能够将本地数据从客户端发送到主机。 docker run 可以将标准输入发送到服务器。

    Docker 构建

    docker build 实际上会在您的客户端指向的远程主机上运行。 “构建上下文”被发送出去,然后一切都远程运行。您甚至可以将 maven 构建作为构建的一部分运行:

    FROM mvn-image
    COPY . /workdir
    RUN mvn compile
    CMD ls /workdir
    

    然后运行

    docker build -t my-mvn-build .
    

    您最终会在远程主机上获得一个包含您构建的图像。没有本地构建/推送/远程构建步骤。

    Docker 运行 Stdio

    docker run 可以执行标准的 Unix IO,因此将某些内容传递到在容器中运行的命令中的工作方式如下:

    tar -cf - . | docker run -i busybox sh -c 'tar -xvf -; ls -l /'
    

    我不确定这将如何与您提供的用于运行容器的 mvn 命令一起工作,在普通 Docker 客户端下它会是这样的:

    tar -cf - -C /projects/project-dir . | \
      docker run mvn-image mvn compile sh -c 'tar -xvf - -C /workdir; mvn compile'
    

    存储插件

    否则,您可以以某种方式从客户端将数据挂载到主机上。有NFSsshfs 存储插件。

    Rsync

    使用rsync 或类似的东西将您的项目发送到 Docker 主机会随着时间的推移变得更加高效。

    Docker cp 脚本

    docker cp 是一个相当简单的解决方案。如果你把它放在一个脚本中,然后得到一个“单行”来运行。

    #!/bin/sh
    set -uex
    cid=$(docker create mvn-image mvn compile)
    docker cp /projects/project-dir $cid/workdir
    docker start $cid
    docker logs -f $cid
    

    【讨论】:

    • docker cp one liner 作为脚本很棒。其余的答案非常全面。
    【解决方案2】:

    您必须使用 Docker Volume 插件来挂载共享/网络文件夹。

    https://docs.docker.com/engine/tutorials/dockervolumes/#mount-a-shared-storage-volume-as-a-data-volume

    【讨论】:

      猜你喜欢
      • 2019-07-08
      • 2021-04-03
      • 1970-01-01
      • 2013-03-19
      • 2018-08-29
      • 1970-01-01
      • 1970-01-01
      • 2016-05-29
      • 1970-01-01
      相关资源
      最近更新 更多