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.

Damien-Amen
quelle

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 .

Damien-Amen
quelle
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 .

JakubKnejzlik
quelle
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.

shizhz
quelle
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.

Lutz Prechelt
quelle
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

Prashanth
quelle
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. :) :)

Rajeev Rathor
quelle
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.

Dheeraj Kumar
quelle