Docker:构建映像时出现"lstat no such file or directory"错误.文件就在那里

Ole*_*ann 35 docker

我想将一个简单的JS Boilerplate部署到Docker Cloud.我使用的Dockerfile已经用于不同的Boilerplate和图像.Dockerfile非常简单.它只是基于官方的nginx,将两个配置文件,然后我的gulp样板文件的输出文件夹添加到nginx根目录.所以我将它从一个目录复制到新的样板文件,因为我想尝试这个.

我得到的错误是这(最后一行)

Sending build context to Docker daemon 277.5 kB
Step 1 : FROM nginx
 ---> af4b3d7d5401
Step 2 : MAINTAINER Ole Bjarnstroem
 ---> Using cache
 ---> f57bc23d9444
Step 3 : ENV LANG en_US.UTF-8
 ---> Using cache
 ---> f6f4a76092dd
Step 4 : COPY ./nginx/nginx.conf /etc/nginx/nginx.conf
 ---> Using cache
 ---> c4f83a39ba73
Step 5 : COPY ./nginx/default.conf /etc/nginx/conf.d/default.conf
 ---> Using cache
 ---> 6fe5a6b61d9f
Step 6 : ADD ./dist /usr/share/nginx/html
lstat dist: no such file or directory
Run Code Online (Sandbox Code Playgroud)

但dist文件夹就在那里.

.
??? Dockerfile
??? JSCS.intellij.formatter.xml
??? README.md
??? app
??? dist
??? gulpfile.babel.js
??? jspm.conf.js
??? jspm_packages
??? karma.conf.js
??? nginx
??? node_modules
??? package.json
??? tsconfig.json
??? tslint.json
??? typings
??? typings.json
Run Code Online (Sandbox Code Playgroud)

值得注意的是,要复制的文件夹被调用./public所以我可以想象这是一种奇怪的Docker Cache问题.

我的Dockerfile:

FROM nginx

ENV LANG en_US.UTF-8

# Copy configuration files
COPY ./nginx/nginx.conf /etc/nginx/nginx.conf
COPY ./nginx/default.conf /etc/nginx/conf.d/default.conf

# Add Gulp output folder to server root
ADD ./dist /usr/share/nginx/html

# Port configuration
EXPOSE 8080
Run Code Online (Sandbox Code Playgroud)

到目前为止我尝试了什么:

  • 删除悬空和未使用的图像
  • 删除之前由同一个docker文件生成的图像
  • 使用不同的标签

我的构建命令:

docker build -t my_repo/my_app .
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助!

编辑:每个其他文件夹工作.它也不是文件权限的问题.看来,Docker只是不喜欢dist文件夹.哪个很烂.

Ole*_*ann 83

嗯,傻我.项目文件夹中有一个.dockerignore文件dist...案例已关闭

  • 卫生署!我在这个问题上挣扎了好几个小时,感谢发布这个其他我会丢失的.我的愚蠢甚至更进了..在.dockerignore :( (5认同)
  • 我刚刚这样做了 想知道为什么我的.rpm没有得到ADDed.当我意识到我在.dockerignore中有*.rpm时,一切都变得清晰了(读完之后).谢谢. (2认同)
  • 一段时间以前,这个答案对我有所帮助; 然后我今天不得不再次谷歌这个,并且在`.dockerignore`中实际上没有我试图添加的文件夹的记录......然后我在文件夹的名称中发现了一个拼写错误:\ (2认同)
  • Docker可以在这里发出更好的错误消息. (2认同)
  • 这就是我们没有生命的原因。 (2认同)

Ric*_*ich 14

我有同样的问题,但它不是.dockerignore,我忘了指定运行docker的目录.在我的情况下,该目录是.我的完整命令之前是

docker build - < Dockerfile
Run Code Online (Sandbox Code Playgroud)

之后是

docker build . < Dockerfile
Run Code Online (Sandbox Code Playgroud)


Vij*_*y47 6

我在build命令之后使用-f指定dockerfile

例如:

sudo docker build . -t test:i386 -f mydockerfile

构建后的点是要构建的目录,在本例中为dir.