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

我正在尝试执行一些自动化,同时build立我的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 

我的下一步是将这个构build的文件夹移动到另一个目录,然后删除tempDir。 我的问题是COPY命令不能按我的预期工作。

 COPY built/* /data/ 

我一直在得到像'没有这样的文件或目录'或'lstat内置/:没有这样的文件或目录'的错误。 我试过./built,./built/,built /,/ tempDir / built /,还有其他的仍然得到相同的错误。 任何人都可以帮忙吗?

你正试图复制你的容器中的东西,所以COPY将无法工作,因为它是特定于你的主机 – >容器。

相反,你将不得不在你的容器中运行一个bash命令。

RUN cp -rf built /data/

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

 RUN cp -r built/* /data/ 

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

 RUN mv built /data 

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