Подтвердить что ты не робот

Docker: ошибка "lstat no such file or directory" при создании изображения. Файл есть

Я хочу развернуть простой JS Boilerplate в Docker Cloud. Я использую Dockerfile, который я уже использовал для другого Boilerplate и изображения. Файл Docker довольно прост. Он основан только на официальном 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 Поэтому я мог представить себе, что это какая-то странная проблема с кэшем докеров.

My 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 просто не любит папку dist. Который сосет.

4b9b3361

Ответ 1

Ну, глупо мне. В папке проекта был файл .dockerignore с dist... Закрытый случай

Ответ 2

У меня была такая же проблема, но это не был .dockerignore, я забыл указать каталог для запуска docker. В моем случае этот каталог был . Моя полная команда раньше была

docker build - < Dockerfile

и после

docker build . < Docker file

Ответ 3

Я поместил каталог после использования команды сборки -f, чтобы указать файл dockerfile

например:

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

Точка после сборки - это каталог, из которого следует построить, в данном случае - настоящий каталог.

Ответ 4

У меня была эта проблема, и проблема оказалась в том, что я добавил комментарий, например.

COPY file1.txt dest/ # comment

Оказывается, вы не можете этого сделать.

Ответ 5

Связанная ошибка в SDK версии приложения Google App Engine 138 привела к тому же сообщению об ошибке. Эта ошибка была исправлена ​​в версии 139 SDK. Вы можете перейти на новую версию с помощью следующей команды:

gcloud components upgrade

Ответ 6

У меня также была та же проблема, проблема была не в моем .dockerignore, а в моем .gitignore, поскольку я не мог удалить dist из моего gitgnore. Я добавил команду cp в свой файл Docker:

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

Ответ 7

При следующей ошибке сборки docker,

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

Я получил его, перезапустив службу докеров.

sudo service docker restart

Ответ 8

(кредиты: https://serverfault.com/a/666154/152918)

Файлы, которые вы хотите скопировать, должны находиться внутри каталога изображений Docker. Вы не можете ссылаться на файлы в любой точке вашей файловой системы.