如何在Docker构建中使用COPY命令?

时间:2016-09-14 01:38:00

标签: docker dockerfile

我正在尝试在构建我的docker镜像时执行一些自动化。下面是我在Windows 8,Kitematic,Virtual Box中运行的代码:

FROM node:6

# Create directory
RUN mkdir -p /tempDir && mkdir -p /tempDir/built && mkdir -p /data

# Setup build environment
COPY . /tempDir
RUN npm install -g gulp typings 

# Build from source
WORKDIR /tempDir 
RUN npm install && typings install && gulp build 

到目前为止,一切都很好,成功将我的打字稿构建到/ tempDir / built目录中的javascript。我冲进我的容器,它看起来像这样:

tempDir/gulpfile.js
tempDir/typings
tempDir/src 
tempDir/built

我的下一步是将此内置文件夹移动到另一个目录,然后删除tempDir。我的问题是COPY命令不能像我预期的那样工作。

COPY built/* /data/

我继续收到错误,例如'没有这样的文件或目录'或'lstat built /:没有这样的文件或目录'。 我试过./built,./ build /,build /,/ tempDir / built /,还有其他的错误。 任何人都可以提供帮助吗?

2 个答案:

答案 0 :(得分:4)

COPY将文件从主机文件系统复制到容器中。看起来您想将文件从容器中的一个目录复制到另一个目录。为此,您需要使用RUNcp

RUN cp -r built/* /data/

由于您将删除/tempDir/目录,因此可以通过重命名目录来加快速度:

RUN mv built /data

这样您就不必复制数据,然后删除原件。

答案 1 :(得分:1)

您正在尝试复制容器中的内容,因此COPY无效,因为它特定于您的主机 - >容器

相反,您必须在容器内运行bash命令。

RUN cp -rf built /data/