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

Sim*_*mon 6 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 
Run Code Online (Sandbox Code Playgroud)

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

tempDir/gulpfile.js
tempDir/typings
tempDir/src 
tempDir/built
Run Code Online (Sandbox Code Playgroud)

我的下一步是将生成的文件夹移动到另一个目录,然后删除tempDir。我的问题是COPY命令无法按预期工作。

COPY built/* /data/
Run Code Online (Sandbox Code Playgroud)

我不断收到类似“无此文件或目录”或“ lstat内置/:无此文件或目录”之类的错误。我尝试了./built、./built/、built/、/tempDir/built/和其他错误。有人可以帮忙吗?

drs*_*drs 5

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

RUN cp -r built/* /data/
Run Code Online (Sandbox Code Playgroud)

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

RUN mv built /data
Run Code Online (Sandbox Code Playgroud)

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


Mik*_*ung 3

您正在尝试复制容器中的某些内容,因此COPY无法工作,因为它特定于您的主机 --> 容器。

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

RUN cp -rf built /data/