Сборка Docker дает «невозможно подготовить контекст: контекст должен быть каталогом: / Users / tempUser / git / docker / Dockerfile»


92

У меня Dockerfileесть программа для создания Ubuntuобраза. Но когда я бегу

docker build -t ubuntu-test:latest ./Dockerfile

На консоли отображается следующая ошибка

невозможно подготовить контекст: контекст должен быть каталогом: / Users / tempUser / git / docker / Dockerfile

Я использую Mac OsX. Я тоже пытался sudo. Ничего не получается.

Ответы:


142

Вместо этого вам нужно указать на каталог . Вы не должны указывать dockerfile.

docker build -t ubuntu-test:latest .действительно работает .

docker build -t ubuntu-test:latest ./Dockerfileничего не работает .


почему это так? кажется странным указывать на каталог, когда можно легко указать на сам файл
Моника Хедднек

72

Вы также можете запустить сборку докеров с -fопцией

docker build -t ubuntu-test:latest -f Dockerfile.custom .


1
Это сработало для меня. Имя Dockerfile в моем случае было Dockerfile-abcd, поэтому мне пришлось запустить:docker build -t my-custom-name -f /path_to_my_docker_file/Dockerfile-abcd .
niranjan harpale

17

Чтобы указать Dockerfileпри сборке, вы можете использовать:

docker build -t ubuntu-test:latest - < /path/to/your/Dockerfile

Но он потерпит неудачу, если есть ADDили COPYкоманда, которая зависит от относительного пути. Есть много способов указать contextfor docker build, вы можете обратиться к документации по сборке докеров для получения дополнительной информации.


Сделал это для ubuntu 12.04 : docker build -t ubuntu:12.04 - < Dockerfileвы должны быть в корне файла Dockerfile
Доминик Мотука

15

Понять контексты

docker buildкоманда

Базовый синтаксис команды сборки docker:

docker build -t imagename:imagetag context_dir

Контекст

Контекст - это каталог, который определяет, что будет видеть процесс сборки Docker: с точки зрения Dockerfile, любой файл context_dir/mydir/myfileв вашей файловой системе станет /mydir/myfileв Dockerfile и, следовательно, во время процесса сборки.

Докерфайл

Если dockerfile вызывается Dockerfileи живет в контексте, он будет найден неявно по соглашению об именах. Это приятно, потому что это означает, что вы обычно можете сразу найти Dockerfile в любом контейнере докеров.

Если вы настаиваете на использовании другого имени, например "/ tmp / mydockerfile", вы можете использовать его -fтак:

docker build -t imagename:imagetag -f /tmp/mydockerfile context_dir

но тогда файл докеров не будет в той же папке или, по крайней мере, его будет труднее найти.


2

Это просто: всякий раз, когда запускается сборка Docker, docker хочет знать, каково имя образа, поэтому нам нужно передать -t:. Теперь убедитесь, что вы находитесь в том же каталоге, в котором находится ваш Dockerfile, и запустите

docker build -t <image_name>:<version> . Пример, docker build -t my_apache:latest .предполагающий, что вы находитесь в том же каталоге, что и ваш Dockerfile, в противном случае передайте флаг -f и Dockerfile.

docker build -t my_apache:latest -f ~/Users/documents/myapache/Dockerfile


Чтобы эта вторая команда работала для меня, мне пришлось немного ее изменить: docker build -t my_apache:latest -f ~/Users/documents/myapache/Dockerfile(обратите внимание на добавление a .в конце)
Джош

2

Я сталкиваюсь с той же проблемой. Я использую docker version:17.09.0-ce.

Я выполняю следующие шаги:

  1. Создайте Dockerfile и добавленные команды для создания образа докера
  2. Перейдите в каталог, в котором мы создали Dockfile
  3. выполнить команду ниже $ sudo docker build -t ubuntu-test:latest .

Проблема была решена, и изображение было успешно создано.

Примечание: команда сборки зависит от версии докера, а также от того, какой вариант сборки мы используем. :)


1

Одной из причин, по которой я получаю сообщение об ошибке, было имя файла, убедитесь, что имя файла - Dockerfile. Итак, я понял это, надеюсь, это может кому-то помочь.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.