Der Docker-Build gibt "Kontext kann nicht vorbereitet werden: Kontext muss ein Verzeichnis sein: / Users / tempUser / git / docker / Dockerfile"


92

Ich habe eine Dockerfile, die ein UbuntuImage aufbauen soll . Aber wann immer ich renne

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

Es zeigt den folgenden Fehler auf der Konsole

Kontext kann nicht vorbereitet werden: Kontext muss ein Verzeichnis sein: / Users / tempUser / git / docker / Dockerfile

Ich bin auf Mac OsX. Ich habe es auch versucht sudo. Nichts funktioniert.

Antworten:


140

Sie müssen stattdessen auf das Verzeichnis verweisen . Sie dürfen die Docker-Datei nicht angeben.

docker build -t ubuntu-test:latest .tut Arbeit .

docker build -t ubuntu-test:latest ./Dockerfilehat nicht funktioniert .


warum ist es so Es scheint seltsam, auf ein
Verzeichnis zeigen

72

Sie können Docker Build auch mit -fOption ausführen

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


1
Das hat bei mir funktioniert. Dockerfile Name in meinem Fall war Dockerfile-abcd, also musste ich feuern:docker build -t my-custom-name -f /path_to_my_docker_file/Dockerfile-abcd .
niranjan harpale

17

Um ein DockerfileWann-Build anzugeben , können Sie Folgendes verwenden:

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

Aber es wird scheitern , wenn es ADDoder COPYBefehl, der auf relativen Pfad abhängt. Es gibt viele Möglichkeiten, ein contextfor anzugeben. Weitere Informationen finden docker buildSie in den Dokumenten des Docker- Builds.


Habe dies für Ubuntu 12.04 getan : docker build -t ubuntu:12.04 - < DockerfileDu musst in der Wurzel der Dockerfile sein
Dominic Motuka

15

Kontexte verstehen

Der docker buildBefehl

Die grundlegende Syntax des Build-Befehls von Docker lautet

docker build -t imagename:imagetag context_dir

Der Kontext

Der Kontext ist ein Verzeichnis und bestimmt, was der Docker-Erstellungsprozess sehen wird: Aus Sicht der Docker-Datei wird jede Datei context_dir/mydir/myfilein Ihrem Dateisystem /mydir/myfilein die Docker-Datei und damit während des Erstellungsprozesses aufgenommen.

Die Docker-Datei

Wenn die Docker-Datei aufgerufen wird Dockerfileund im Kontext lebt, wird sie implizit durch die Namenskonvention gefunden. Das ist schön, denn normalerweise finden Sie die Docker-Datei sofort in jedem Docker-Container.

Wenn Sie darauf bestehen, einen anderen Namen zu verwenden, z. B. "/ tmp / mydockerfile", können Sie Folgendes verwenden -f:

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

Aber dann befindet sich die Docker-Datei nicht im selben Ordner oder ist zumindest schwerer zu finden.


2

Es ist einfach, wenn Docker-Build ausgeführt wird, möchte Docker wissen, wie der Image-Name lautet, daher müssen wir -t: übergeben. Stellen Sie nun sicher, dass Sie sich in demselben Verzeichnis befinden, in dem Sie Ihre Docker-Datei haben, und führen Sie sie aus

docker build -t <image_name>:<version> . Beispiel: docker build -t my_apache:latest .Angenommen, Sie befinden sich im selben Verzeichnis wie Ihre Docker-Datei. Andernfalls übergeben Sie das Flag -f und die Docker-Datei.

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


Damit dieser zweite Befehl für mich ausgeführt werden konnte, musste ich ihn leicht ändern: docker build -t my_apache:latest -f ~/Users/documents/myapache/Dockerfile(Beachten Sie die Hinzufügung eines .am Ende)
Josh

2

Ich stehe vor dem gleichen Problem. Ich benutze docker version:17.09.0-ce.

Ich folge den folgenden Schritten:

  1. Erstellen Sie eine Docker-Datei und fügen Sie Befehle zum Erstellen eines Docker-Images hinzu
  2. Gehen Sie zu dem Verzeichnis, in dem wir Dockfile erstellt haben
  3. Führen Sie den folgenden Befehl aus $ sudo docker build -t ubuntu-test:latest .

Das Problem wurde behoben und das Image erfolgreich erstellt.

Hinweis: Der Build-Befehl hängt von der Docker-Version sowie von der von uns verwendeten Build-Option ab. :) :)


1

Einer der Gründe, warum ich einen Fehler bekam, war der Dateiname. Stellen Sie sicher, dass der Dateiname Dockerfile ist. Also habe ich es herausgefunden und hoffe, es könnte jemandem helfen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.