Docker:"没有这样的文件或目录"构建图像时出错。文件就在那里

时间:2016-03-23 13:59:50

标签: 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

但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 build -t my_repo/my_app .

感谢您的帮助!

修改:其他每个文件夹都有效。它也不是文件权限的问题。看来,Docker只是doesn't like the dist folder。哪个很烂。

10 个答案:

答案 0 :(得分:80)

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

答案 1 :(得分:13)

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

docker build - < Dockerfile

之后是

docker build . < Dockerfile

答案 2 :(得分:5)

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

例如:

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

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

答案 3 :(得分:2)

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

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

答案 4 :(得分:2)

我遇到了这个问题,结果问题是我在内容中发表了评论,例如

COPY file1.txt dest/ # comment

原来你不能那样做。

答案 5 :(得分:1)

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

gcloud components upgrade

答案 6 :(得分:0)

对于以下泊坞窗构建错误,

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

我通过重启docker服务来解决这个问题。

sudo service docker restart

答案 7 :(得分:0)

(学分:https://serverfault.com/a/666154/152918

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

答案 8 :(得分:0)

关于我如何得到此错误的一些信息: 我在gitlab-ci中运行,并在日志中将其混入:

enter image description here

因此,当我进入运行docker build的阶段时,那里没有Dockerfile,所以出现了此错误。

有两种解决方法:

  1. 您可以在项目设置中的某处进行设置,以使用获取/克隆的 git策略。我不确定它是哪个设置-因此请尝试直到获得它。这将为整个项目配置git策略。

  2. 您也可以只为构建设置git策略-您可以在gitlab-ci.yml文件顶部添加这样的变量:

variables:
  GIT_STRATEGY: clone

它应该解决它。

答案 9 :(得分:0)

在Mac OS Big Sur上,我只需要重新启动Docker服务,然后再次为我工作(更改.env后总是发生)