我想将一个简单的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。哪个很烂。
答案 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中运行,并在日志中将其混入:
因此,当我进入运行docker build
的阶段时,那里没有Dockerfile,所以出现了此错误。
有两种解决方法:
您可以在项目设置中的某处进行设置,以使用获取/克隆的 git策略。我不确定它是哪个设置-因此请尝试直到获得它。这将为整个项目配置git策略。
您也可以只为构建设置git策略-您可以在gitlab-ci.yml
文件顶部添加这样的变量:
variables:
GIT_STRATEGY: clone
它应该解决它。
答案 9 :(得分:0)
在Mac OS Big Sur上,我只需要重新启动Docker服务,然后再次为我工作(更改.env后总是发生)