簡體   English   中英

Docker:構建鏡像時出現“lstat no such file or directory”錯誤。 文件在那里

[英]Docker: “lstat no such file or directory” error when building image. File is there

我想將一個簡單的 JS Boilerplate 部署到 Docker Cloud。 我使用已用於不同樣板和圖像的 Dockerfile。 Dockerfile 非常簡單。 它只是基於官方的nginx,添加了兩個配置文件,然后將我的gulp樣板的輸出文件夾添加到nginx根目錄。 所以我將它從 one 目錄復制到新的樣板,因為我想嘗試這個。

我得到的錯誤是這個(最后一行)

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 緩存問題。

我的 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 只是不喜歡 dist 文件夾 這很糟糕。

好吧,愚蠢的我。 項目文件夾中有一個帶有dist.dockerignore文件...案例關閉

我遇到了同樣的問題,但不是.dockerignore ,我忘記指定運行.dockerignore的目錄。在我的情況下,該目錄是. 我之前的完整命令是

docker build - < Dockerfile

之后是

docker build . < Dockerfile

我把目錄放在build命令后面用-f來指定dockerfile

例如:

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

build 之后的點是要構建的目錄,在本例中為當前目錄。

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

要復制的文件必須在 Docker 映像目錄中。 您不能在文件系統的任何位置引用文件。

我也有同樣的問題,問題不是我的.dockerignore而是我的.gitignore ,因為我無法從我的 gitgnore 中刪除 dist 我在我的 Dockerfile 中添加了cp命令:

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

我遇到了這個問題,結果是我內聯了一條評論,例如

COPY file1.txt dest/ # comment

事實證明你不能這樣做。

Google App Engine SDK 版本 138 中的一個相關錯誤導致了相同的錯誤消息。 此錯誤已在 SDK 版本 139 中修復。 您可以使用以下命令升級到最新版本:

gcloud components upgrade

對於以下 docker build 錯誤,

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

我通過重新啟動 docker 服務解決了這個問題。

sudo service docker restart

關於我如何得到這個錯誤的一點:我在 gitlab-ci 中運行,我在日志中 git 這個:

在此處輸入圖片說明

所以當我到達運行 docker docker build的階段時,那里沒有 Dockerfile,所以我收到了這個錯誤。

有兩種方法可以解決:

  1. 您可以在項目設置中的某處進行設置以使用 fetch/clone 的git 策略 我不確定它是哪個設置 - 所以一直玩直到你得到它。 這將為整個項目配置 git 策略。

  2. 您還可以僅為構建設置 git 策略 - 您可以在gitlab-ci.yml文件的頂部添加這樣的變量:

variables:
  GIT_STRATEGY: clone

它應該解決它。

在 Mac OS Big Sur 上,我不得不重新啟動我的 Docker 服務,然后再次為我工作(總是在更改我的 .env 后發生)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM