在我的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
工作。
但运行Running
dockerbuild设docker/开发/ Dockerfile`造成这个问题。
-f
或--file
指定Dockerfile
的名称和位置。
它发现它起初很奇怪,因为当我在应用程序根目录中的Dockerfile
工作正常。 如果你想更好地pipe理你的环境docker文件,这将会有所帮助。
对于我来说,这是Google Cloud SDK的一个问题:
https://code.google.com/p/google-cloud-sdk/issues/detail?id=1431