У меня есть файл Dockerfile в моей корневой (~) папке. Первые три строки моего файла выглядят так:
COPY file1 /root/folder/
COPY file2 /root/folder/
COPY file3 /root/folder/
но он возвращает следующую ошибку для каждой строки:
Данный файл или каталог отсутствует
Файлы находятся в том же каталоге, что и мой Dockerfile, и я запускаю команду docker build - < Dockerfile
в том же каталоге в терминале.
Что я именно здесь делаю не так?
Ответы:
Инструкция COPY в
Dockerfile
копирует файлы вsrc
кdest
папке. Похоже , что вы либо с отсутствующимfile1
,file2
иfile3
или пытаться строитьDockerfile
из той папки.Обратитесь к документу Dockerfile
Также команда для создания
Dockerfile
должна быть примерно такой.источник
Также проверьте
.dockerignore
файл.Я знаю, что это очень редкий случай, но я упоминал об этом файле.
источник
ripgrep
каталог сборки) и не выполнял поиск в файлах точек, поэтому я не видел последней надоедливой ссылки на старый каталог.Возможно, это вызвано тем, что вы ссылаетесь на file1 / file2 / file3 как на абсолютный путь, который не находится в контексте сборки, Docker ищет путь только в контексте сборки.
Например, если вы используете COPY / home / yourname / file1, сборка Docker интерпретирует его как $ {docker build working directory} / home / yourname / file1, если здесь нет файла с таким же именем, ошибка файла или каталога не возникает.
Обратитесь к одной из проблем с докером
источник
ADD
директивой, спасибо.Кажется, что команды:
а также:
не выполняются одинаково. Если вы хотите создать 2 образа докеров из одной папки с помощью Dockerfile и Dockerfile2, команду COPY нельзя использовать во втором примере с использованием stdin (<Dockerfile2). Вместо этого вы должны использовать:
Тогда COPY работает должным образом.
источник
Запуск
docker build . -f docker/development/Dockerfile
сработал, что позволяет запускать файл докеров из указанного каталога, отличного от корня вашего приложения.Используйте
-f
или,--file
чтобы указать имя и расположение файлаDockerfile
.Это случилось со мной при попытке запустить файл докера из другого каталога.
У меня была проблема,
COPY failed: stat /var/lib/docker/tmp/docker-builder929708051/XXXX: no such file or directory
и мне удалось решить эту проблему, указав файл докера.Это было
docker build docker/development/Dockerfile
причиной этой проблемы для меня.Сначала мне это показалось странным, потому что когда у меня был
Dockerfile
корневой каталог приложений, он работал нормально. Это поможет, если вы хотите немного лучше управлять файлами докеров среды.источник
docker build . -f docker/development/Dockerfile
это работаетЯ только что столкнулся с этой проблемой, и ни одно из предложений здесь не решило мою проблему. Оказалось, что в моем файле были неправильные окончания строк , и мне пришлось заменить их на соответствующие окончания строк. (В этом случае из CRLF в LF, поэтому Ubuntu 14.04 распознает скрипт, который я редактировал в Windows.)
Я изменил окончания строк с помощью VSCode, и у большинства редакторов кода должна быть возможность выбирать окончания строк.
Надеюсь, это кому-то поможет.
источник
Я чувствую себя немного глупо, но моя проблема заключалась в том, что я запускал docker-compose, а мой Dockerfile находился в подкаталоге ./deploy. Моя ссылка ADD должна относиться к корню проекта, а не к Dockerfile.
Изменено: ADD ./file.tar.gz / etc / folder / в: ADD ./deploy/file.tar.gz / etc / folder /
Во всяком случае, подумал, что опубликую на случай, если кто-то столкнется с той же проблемой.
источник
Вот решение и лучшая практика:
Вам нужно создать папку ресурсов, в которой вы можете хранить все ваши файлы, которые вы хотите скопировать.
Команду для копирования файлов нужно указать так:
где
* ресурсы - ваша локальная папка, которую вы создали в той же папке, где находится Dockerfile.
* / root / folder / - папка в вашем контейнере
источник
Для следующей ошибки,
Я получил это, перезапустив службу докеров.
источник
Ошибка «Файл не найден» с Docker put_archive. Я использую Python API для докеров. Докер версии 1.12.5, сборка 7392c3b
Я не могу копировать файлы в созданный контейнер докеров.
Если я изменю порядок работы, ошибки не возникнет, и файлы будут скопированы именно туда, где они мне нужны. Итак, я знаю, что мой код работает и делает то, что я хочу. Но важно скопировать файлы конфигурации в контейнер до его запуска. Копирование файлов после запуска приводит к тому, что контейнер запускается с конфигурацией по умолчанию, а не с пользовательской конфигурацией, которую необходимо скопировать на место перед запуском контейнера. Докер утверждает, что эта проблема закрыта, но все еще влияет на мое приложение.
Это работает; Тот же код, другой порядок выполнения.
источник
если вы уверены, что поступили правильно, но докер все еще жалуется, взгляните на эту проблему: https://github.com/moby/moby/issues/27134 .
Я обгорел от этого, и похоже, что перезапуск Docker Engine
service docker restart
просто решит эту проблему.источник
Я искал исправление этого, и папка, которую я ДОБАВИЛ или КОПИРОВАЛА, не находилась в папке сборки, в нескольких каталогах выше или в /
Перемещение папки из-за пределов папки сборки в папку сборки устранило мою проблему.
источник
один из способов не использовать стандартный ввод и сохранить контекст:
1) в вашем Dockerfile вы должны добавить
2) после этого вы должны перейти к родительскому элементу / your_dir_to_copy dir
2) затем запустите эту команду
3) после того, как вы создадите свой контейнер
4) После того, как вы скопируете каталог в свой контейнер
источник
Предыдущие вызовы COPY могут быть связаны с изменением каталога.
Добавьте завершающую косую черту к первому вызову
источник
Я столкнулся с этим. Копирование некоторых каталогов не помогло. Копирование файлов сделал. Оказалось, что это связано с тем, что файлы, содержащиеся в .gitignore (а не только .dockerignore), также игнорируются. См .: https://github.com/zeit/now/issues/790
источник
.dockerignore
Я знаю, что это старое, но кое-что нужно указать. Если вы думаете, что все в порядке, проверьте свой файл .gitignore :)
У вас может быть папка локально, но если папка находится в вашем git ignore, то ее нет на сервере, а это означает, что Docker не может найти эту папку, поскольку она не существует.
источник
Похоже и благодаря ответу Цлегайтиса , после
это показывает
Проверяя этот журнал, он говорит, что докер будет использовать
.gitignore
:Поэтому я исправил свой
.gitignore
(вместо этого я использую его как белый список), и докер скопировал файл.[Я добавил ответ, потому что у меня недостаточно репутации, чтобы комментировать]
источник
У меня была эта проблема, хотя мой исходный каталог находился в правильном контексте сборки. Причина в том, что мой исходный каталог был символической ссылкой на место вне контекста сборки.
Например, мой Dockerfile содержит следующее:
Если
dir1
это символическая ссылка, тоCOPY
в моем случае команда не работает.источник
Так что это случилось пару раз совсем недавно. Как разработчик .Net, используя VisualStudio Я изменил свое имя сборки из
SomeThing
вSomething
качестве имени DLL , но это не меняет файл .csproj , который остаетсяSomeThing.csproj
Dockerfile использует имена файлов Linux с учетом регистра, поэтому вновь созданный автоматически Dockerfile пытался скопировать,
Something.csproj
но не смог найти. Итак, вручную переименовав этот файл (сделав его строчными буквами), все заработалоНо ... вот предостережение. Это изменение имени файла на моем ноутбуке с Windows не
SomeThing.csproj
обрабатывается Git, поэтому источник репо все еще находится в репо, и во время процесса CI / CD сборка Docker не удалась по тем же причинам ...Мне пришлось изменить имя файла непосредственно в качестве фиксации репо .... неприятный небольшой обходной путь, но меня заставили
tl; dr Если в ОС Windows проверьте чувствительность к регистру имен файлов и имейте в виду, что локальные переименования файлов не обрабатываются при изменении Git, поэтому убедитесь, что ваше репо также изменено при использовании CI / CD
источник
Здесь уже есть отличные ответы. Что сработало для меня, так это переместить комментарии на следующую строку.
ПЛОХО :
ХОРОШО :
источник