Kompilacja Dockera daje „nie można przygotować kontekstu: kontekst musi być katalogiem: / Users / tempUser / git / docker / Dockerfile”

92

Mam taki, Dockerfilektóry ma budować Ubuntuobraz. Ale kiedy kiedykolwiek biegam

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

Pokazuje następujący błąd na konsoli

nie można przygotować kontekstu: kontekst musi być katalogiem: / Users / tempUser / git / docker / Dockerfile

Jestem na Mac OsX. Ja też próbowałem sudo. Nic nie działa.

Damien-Amen
źródło

Odpowiedzi:

142

Zamiast tego musisz wskazać katalog . Nie możesz określać pliku dockerfile.

docker build -t ubuntu-test:latest .wykonuje pracę .

docker build -t ubuntu-test:latest ./Dockerfilema nie działać .

Damien-Amen
źródło
dlaczego tak jest? wydaje się dziwne, że trzeba wskazywać katalog, kiedy można go łatwo wskazać na sam plik
Monica Heddneck
72

Możesz także uruchomić kompilację dockera z -fopcją

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

JakubKnejzlik
źródło
1
To zadziałało dla mnie. Nazwa pliku Dockerfile w moim przypadku brzmiała Dockerfile-abcd, więc musiałem odpalić:docker build -t my-custom-name -f /path_to_my_docker_file/Dockerfile-abcd .
niranjan harpale
17

Aby określić czas Dockerfilekompilacji, możesz użyć:

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

Ale to się nie powiedzie, jeśli istnieje ADDlub COPYpolecenie, które zależy od ścieżki względnej. Istnieje wiele sposobów określenia contextfor docker build, możesz zapoznać się z dokumentacją kompilacji dockera, aby uzyskać więcej informacji.

shizhz
źródło
Zrobiłem to dla ubuntu 12.04 : docker build -t ubuntu:12.04 - < DockerfileMusisz być w katalogu głównym pliku Dockerfile
Dominic Motuka
15

Zrozum konteksty

docker buildkomenda

Podstawowa składnia polecenia kompilacji platformy Docker to

docker build -t imagename:imagetag context_dir

Kontekst

Kontekst jest katalogiem i określa, co zobaczy proces budowania platformy Docker: Z punktu widzenia pliku Dockerfile każdy plik context_dir/mydir/myfilew systemie plików stanie się /mydir/myfileplikiem Dockerfile, a tym samym podczas procesu kompilacji.

Plik dockerfile

Jeśli plik dockerfile jest wywoływany Dockerfilei żyje w kontekście, zostanie znaleziony niejawnie przez konwencję nazewnictwa. To miłe, ponieważ oznacza to, że zwykle można od razu znaleźć plik Dockerfile w dowolnym kontenerze dockera.

Jeśli nalegasz na użycie innej nazwy, powiedz „/ tmp / mydockerfile”, możesz użyć -ftego:

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

ale wtedy plik dockerfile nie będzie w tym samym folderze lub przynajmniej będzie trudniejszy do znalezienia.

Lutz Prechelt
źródło
2

To proste, gdy uruchamiana jest kompilacja Dockera, docker chce wiedzieć, jaka jest nazwa obrazu, więc musimy przekazać -t:. Teraz upewnij się, że jesteś w tym samym katalogu, w którym masz plik Dockerfile i uruchom

docker build -t <image_name>:<version> . Przykład docker build -t my_apache:latest .zakładając, że jesteś w tym samym katalogu, co plik Dockerfile, w przeciwnym razie przekaż flagę -f i plik Dockerfile.

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

Prashanth
źródło
Aby to drugie polecenie działało za mnie, musiałem je nieznacznie zmienić: docker build -t my_apache:latest -f ~/Users/documents/myapache/Dockerfile(zwróć uwagę na dodanie .na końcu)
Josh
2

Mam ten sam problem. Używam docker version:17.09.0-ce.

Wykonuję poniższe kroki:

  1. Utwórz plik Dockerfile i dodane polecenia do tworzenia obrazu dockera
  2. Przejdź do katalogu, w którym utworzyliśmy plik Dockfile
  3. wykonaj poniższe polecenie $ sudo docker build -t ubuntu-test:latest .

Rozwiązano problem i pomyślnie utworzono obraz.

Uwaga: polecenie budowania zależy od wersji dockera, a także od używanej opcji kompilacji. :)

Rajeev Rathor
źródło
1

Jednym z powodów, dla których otrzymuję błąd, była nazwa pliku, upewnij się, że nazwa pliku to Dockerfile. Rozgryzłem to, mam nadzieję, że może to komuś pomóc.

Dheeraj Kumar
źródło