【问题标题】:windows "C:/Users/<username>/" directories not visible during `docker build` commandwindows "C:/Users/<username>/" 目录在 `docker build` 命令期间不可见
【发布时间】:2016-09-20 08:20:04
【问题描述】:

据我所知,docker-machine 会在 windows 中自动挂载C:/Users/&lt;username&gt; 目录。我能够以/c/Users/&lt;username&gt; 的身份从快速启动终端访问它并对其执行各种操作。

但是,当我从 Dockerfile 内部 RUN 发出命令时,docker 引擎根本无法识别此安装路径。
例如我有activator zip 位于:

/c/Users/someuser/somefolder/typesafe-activator-1.3.10.zip

以前,我在Dockerfile中使用wget

RUN wget https://downloads.typesafe.com/typesafe-activator/1.3.10/typesafe-ctivator-1.3.10.zip && unzip typesafe-activator-1.3.10.zip

现在我已经在文件系统中有这个 zip,我想:

RUN cp /c/Users/someuser/somefolder/typesafe-activator-1.3.10.zip . && unzip typesafe-activator-1.3.10.zip

但我明白了:

cp:cannot stat '/c/Users/someuser/somefolder/typesafe-activator-1.3.10.zip': No such file or directory

有人知道我如何从主机上的共享文件夹中获取文件到 docker 构建过程中吗?

更新 这是我完整的Dockerfile

FROM openjdk:8
ENV PROJECT_WORKPLACE /usr/src
RUN mkdir -p $PROJECT_WORKPLACE/activator $PROJECT_WORKPLACE/build    $PROJECT_WORKPLACE/app

WORKDIR $PROJECT_WORKPLACE/activator

COPY . typesafe-activator-1.3.10.zip
RUN unzip typesafe-activator-1.3.10 

ENV PATH $PROJECT_WORKPLACE/activator/typesafe-activator-1.3.10/activator-dist-1.3.10/bin:$PATH

COPY . $PROJECT_WORKPLACE/build

WORKDIR $PROJECT_WORKPLACE/build

RUN activator clean stage

RUN cp -R $PROJECT_WORKPLACE/build/target/universal/stage $PROJECT_WORKPLACE/app

EXPOSE 9000

CMD $PROJECT_WORKPLACE/app/stage/bin/docker-play -Dhttp.port=9000 -Dlogger.file=$PROJECT_WORKPLACE/build/logger.xml

【问题讨论】:

    标签: linux windows docker


    【解决方案1】:

    RUN 看到 Dockerfile context

    上下文是当前文件夹(Dockerfile 所在的位置)及其子文件夹。

    docker build 命令从 Dockerfile 和上下文构建映像。
    构建的上下文是指定位置 PATH 或 URL 中的文件。
    PATH 是本地文件系统上的一个目录。
    URL 是 Git 存储库的位置。

    以递归方式处理上下文。因此,PATH 包含所有子目录,而 URL 包含存储库及其子模块。

    因此,您不需要指定所有路径。

    RUN cp typesafe-activator-1.3.10.zip . && unzip typesafe-activator-1.3.10.zip
    

    注意:您应该使用COPYADD 而不是RUN cp

    COPY typesafe-activator-1.3.10.zip .
    RUN unzip typesafe-activator-1.3.10.zip
    

    无论如何,您需要的任何资源都应位于 Dockerfile 的同一文件夹或子文件夹中。

    OP egima 使它适用于:

    ADD typesafe-activator-1.3.10.zip .
    

    【讨论】:

    • 这是包含资源所需的完美调整,尽管我必须在COPY 之后添加一个句点。然而,新的问题出现了。我添加了完整的Dockerfile。在unzip 步骤,我得到unzip: cannot find or open typesafe-activator-1.3.10, typesafe-activator-1.3.10.zip or typesafe-activator-1.3.10.ZIP
    • @egima 尝试在COPY 之后添加RUN pwdRUN ls 以了解您在哪里进行了复制。
    • 出于某种原因,尝试将 COPY 替换为 ADD 并将句点(src)的位置与文件名(目标)交换。谢谢
    • @egima 太好了:你当时使用了什么确切的命令? ADD typesafe-activator-1.3.10.zip . ?
    • 当然,我用的就是这个
    猜你喜欢
    • 2019-05-17
    • 2020-08-05
    • 2011-09-05
    • 1970-01-01
    • 2017-05-08
    • 1970-01-01
    • 2019-01-20
    • 2019-06-10
    • 2020-11-09
    相关资源
    最近更新 更多