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

问题描述 投票:35回答:8

我想将一个简单的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

但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

值得注意的是,要复制的文件夹名为./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

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

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

我的构建命令:

docker build -t my_repo/my_app .

谢谢你的帮助!

编辑:每个其他文件夹工作。它也不是文件权限的问题。看来,Docker只是doesn't like the dist folder。哪个很烂。

docker
8个回答
80
投票

嗯,傻我。在项目文件夹中有一个带.dockerignoredist文件......案例已关闭


13
投票

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

docker build - < Dockerfile

之后是

docker build . < Dockerfile

5
投票

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

例如:

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

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


2
投票

我也有同样的问题,问题不是我的.dockerignore而是我的.gitignore,因为我无法从我的gitgnore删除dist我在我的Dockerfile中添加了cp命令:

....
WORKDIR /
RUN cp -r public/dist/* www/
EXPOSE 80

2
投票

我遇到了这个问题,问题结果是我在内容中引用了一个评论,例如:

COPY file1.txt dest/ # comment

事实证明你不能这样做。


1
投票

Google App Engine SDK版本138中的相关错误导致出现相同的错误消息。此错误已在SDK的139版中修复。您可以使用以下命令升级到最新版本:

gcloud components upgrade

0
投票

对于以下docker build错误,

COPY failed: stat /<**path**> :no such file or directory

我通过重启docker服务来解决它。

sudo service docker restart

0
投票

(信用:https://serverfault.com/a/666154/152918

要复制的文件必须位于Docker映像目录中。您无法在文件系统的任何位置引用文件。

© www.soinside.com 2019 - 2024. All rights reserved.