Docker的COPY问题 – “没有这样的文件或目录”

在我的Dockerfile中,我有以下的“COPY”语句:

# Copy app code COPY /srv/visitor /srv/visitor 

不用说,在我的主机系统的“/ srv / visitor”目录下,确实有我的源代码:

 [root@V12 visitor]# ls /srv/visitor/ Dockerfile package.json visitor.js 

现在,当我尝试使用这个Dockerfile来构build一个图像时,它会在应该发生“COPY”的步骤挂起:

 Step 10 : COPY /srv/visitor /srv/visitor INFO[0155] srv/visitor: no such file or directory 

它说没有这样的目录,但显然是。

有任何想法吗?

更新1:

有人指出我错了,就像我理解build筑语境一样。 这个build议相当于把“COPY”声明改为:

 COPY . /srv/visitor 

问题是,我这样做了,构build过程在下一步停止:

 RUN npm install 

它说了一些沿着“没有package.json文件find”的行,当明确是一个。

更新2:

我试图用Dockerfile中的这个改变来运行它:

 COPY source /srv/visitor/ 

它尝试运行npm时停止:

 Step 12 : RUN npm install ---> Running in ae5e2a993e11 npm ERR! install Couldn't read dependencies npm ERR! Linux 3.18.5-1-ARCH npm ERR! argv "/usr/bin/node" "/usr/sbin/npm" "install" npm ERR! node v0.10.36 npm ERR! npm v2.5.0 npm ERR! path /package.json npm ERR! code ENOPACKAGEJSON npm ERR! errno 34 npm ERR! package.json ENOENT, open '/package.json' npm ERR! package.json This is most likely not a problem with npm itself. npm ERR! package.json npm can't find a package.json file in your current directory. npm ERR! Please include the following file with any support request: npm ERR! /npm-debug.log INFO[0171] The command [/bin/sh -c npm install] returned a non-zero code: 34 

那么,副本是否已经执行? 如果是,为什么npm无法findpackage.json?

从文档:

<src>path必须位于构build的上下文中 ; 你不能COPY ../something / something,因为docker build的第一步是将上下文目录(和子目录)发送到docker守护进程。

当你使用/srv/visitor你在构build上下文之外使用绝对path,即使它实际上是当前目录。

你最好像这样组织你的构build上下文:

 ├── /srv/visitor │  ├── Dockerfile │  └── resources │  ├── visitor.json │  ├── visitor.js 

并使用:

 COPY resources /srv/visitor/ 

对于我来说,目录是在正确的上下文中,只有它被包含在项目根目录下的(隐藏) .dockerignore文件中。 这导致错误消息:

 lstat mydir/myfile.ext: no such file or directory 

对我来说,问题是我使用docker build - < Dockerfile

从文档注意:如果使用STDIN( docker build - < somefile )构build,则没有构build上下文,因此不能使用COPY。

对我来说,问题是我正在添加的文件名有一个尾随空间。 重命名固定它。

对于以下错误,

 COPY failed: stat 

我通过重新启动docker服务得到了它。

我终于解决了这个问题,在我的情况下是执行副本的Dockerfile是在更深层次的项目。 所以我意识到主机的构buildpath是相对于Dockerfile的文件位置表示的。

这发生在我试图从一个不同的目录运行docker文件。

我有COPY failed: stat /var/lib/docker/tmp/docker-builder929708051/XXXX: no such file or directory并设法通过指定COPY failed: stat /var/lib/docker/tmp/docker-builder929708051/XXXX: no such file or directory来解决这个问题。

运行docker build . -f docker/development/Dockerfile docker build . -f docker/development/Dockerfile工作。

但运行Runningdockerbuild设docker/开发/ Dockerfile`造成这个问题。

-f--file指定Dockerfile的名称和位置。

它发现它起初很奇怪,因为当我在应用程序根目录中的Dockerfile工作正常。 如果你想更好地pipe理你的环境docker文件,这将会有所帮助。

对于我来说,这是Google Cloud SDK的一个问题:

https://code.google.com/p/google-cloud-sdk/issues/detail?id=1431