kann keine bestimmte Docker-Datei erstellen


88

Ich kann ein Dockerfile wie erstellen

docker build -t deepak/ruby .

Aber für eine Docker-Datei, die nicht benannt ist Dockerfile

# DOCKER-VERSION 0.4.8

FROM deepak/ruby

MAINTAINER Deepak Kannan "deepak@example.com"

RUN ./bin/rails s

Sagen wir, es heißt Dockerfile.app , mit dem wir bauen

docker build -t deepak/app Dockerfile.app

dann bekomme ich den fehler

Uploading context 0 bytes
Error build: EOF
EOF

15
Ihre Frage ist also, wie erstelle ich eine Docker-Datei, wenn der Name der Docker-Datei nicht Docker-Datei ist?
Ken Cochrane

1
@ KenCochrane ja. das ist die
frage

1
Wenn Sie laufen, docker build --helpgibt es eine Zeile, in der Sie finden können, wonach Sie suchen: -f, --file string Name der Docker-Datei (Standard ist 'PATH / Dockerfile')
blasrodri

2
Sie haben 2013 Docker gelernt. Dies ist Voraussicht.
Mai

Antworten:


210

Beachten Sie, dass .am Ende beider Befehle ein Punkt steht.

Docker Build -f MyDockerfile.

Oder mit einem Tag:

Docker-Build -t mysuperimage -f MyDockerfile.


1
docker build -f Dockerfile.consumergibt mir einen Fehler "Docker Build" erfordert genau 1 Argument. Siehe 'Docker Build - Hilfe'. Verwendung: Docker Build [OPTIONS] PATH | URL | -
Kamal

12
@kamal haben Sie .am Ende des obigen Befehls einen Punkt ( ) bemerkt ?
Sateesh Pagolu

7
Ich sage nur - ich muss das hinzufügen. ist einfach nur irritierend
myloginid

2
Das .ist keine Pflicht. Der Befehl build benötigt zwei Argumente, nämlich. Pfad zu Dockerfile& Pfad zum contextVerzeichnis. Also können wir tundocker build -t mysupertag -f ./foo/Dockerfile ./foo
Mohnish


22

Der letzte Parameter für die Docker-Erstellung ist der Erstellungspfad. Wenn Sie ihn eingeben ., bedeutet dies, dass dies der Pfad ist, in dem Sie den finden Dockerfile. Wenn Sie es ändern, Dockerfile.appwird versucht, danach zu suchen Dockerfile.app/Dockerfile, was nicht korrekt ist.

Ich bin mir nicht sicher, ob es noch funktionieren wird, aber Sie haben das früher geschafft.

$ docker build -t deepak/app - < Dockerfile.app

Versuchen Sie dies und prüfen Sie, ob es hilfreich ist. Wenn nicht, öffnen Sie möglicherweise ein Docker-Problem, um diese Funktion wieder hinzuzufügen, oder aktualisieren Sie die Dokumentation zur Verwendung einer Docker-Datei mit einem anderen Namen.

Weitere Informationen hier: http://docs.docker.io/en/latest/commandline/command/build/


1
Ich habe eine URL ausprobiert und es funktioniert. Der Pfad sollte auch gemäß den Dokumenten funktionieren. wird einen Fehler einreichen.
Deepak

5
gemäß den von Ihnen geteilten Dokumenten (danke). docker build - < DockerfileIch kann keine lokale Datei hinzufügen. Aber habe es ausprobiert und es funktioniert
Deepak

2
aber ich möchte ein anderes Dockerfile geben und trotzdem einen Kontext haben, dh. Dateien hinzufügen.
Also

Dadurch wird lediglich ein Kontext mit einer einzelnen Docker-Datei erstellt. Alle unterstützenden Dateien schaffen es nicht in den Kontext.
Feuer

12

Versuchen Sie Dockerfeed . Es verwendet die Docker-Funktion, um einen Kontext über stdin zu erstellen. Ich habe das Skript geschrieben, um genau Ihr Problem anzusprechen, mit dem ich selbst konfrontiert war.

Um eine Docker-Datei durch eine andere zu ersetzen, gehen Sie folgendermaßen vor:

dockerfeed -d Dockerfile.app . | docker build -t deepak/ruby -

Und voilà. Dockerfeed macht dasselbe wie docker build. Es packt die Quelle mit seiner Docker-Datei, aber Sie können die alte Docker-Datei gegen die gewünschte austauschen. Dabei werden keine Dateien erstellt, keine Quelle geändert. Das generierte Teerarchiv wird an Docker weitergeleitet, der es wiederum an den Docker-Daemon weiterleitet.

Update: Dies war früher eine gültige Antwort, als kein -fSchalter verfügbar war. Mit Docker Version 1.5 wurde diese Option eingeführt. Jetzt können Sie eine andere Docker-Datei wie diese erstellen:

docker build -f other-Dockerfile .

5

Sie können dies auch mit Docker-Compose erreichen.

In Ihrer docker-compose.yml unter dem Build-Abschnitt können Sie das Verzeichnis, in dem Sie Ihre Docker-Datei speichern, und ihren alternativen Namen wie folgt angeben:

build:
  context: "/path/to/docker/directory"
  dockerfile: "dockerfile-alternate-name"

Docker-Compose


0

Angenommen, Sie haben die Docker-Toolbox einschließlich Docker-Compose und Docker-Maschine erfolgreich installiert . Dies ist meine docker-compose.yml

version: '2'
services: 
  web: ./www/python
  ports:
   - "5000:5000"

Und das ist unter Dockerfile

FROM python:3.4-alpine
ADD ./www/python /code
WORKDIR /code
RUN pip install -r requirements.txt
CMD ["python", "app.py"]

Stellen Sie sicher, dass sich diese Dateien genau unter dem Stammordner befinden. Wenn Sie Docker-Compose ausführen, erstellen Sie ein Image für das Web.


0

Mein Fall ist im /tmpVerzeichnis und es gibt viele Dateien und Docker versuchen mit anderen Dateien, obwohl ich die übergeben-f <Dockerfile.foo>

Die sauberste und einfachste (für mich) Lösung ist (lesen Sie die dockerfeedobigen Antworten):

cat DockerFile.debian.foo | docker build -t debian.foo -

0

Windows-Benutzer sollten den folgenden Befehl versuchen:

Docker Build -f absoluter_Docker_Dateipfad Punkt

zum Beispiel :

Docker-Build -f D: \ Code \ Core-API \ API_TEST.Dockerfile.

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.