Wie kann ich ein lokales Image als Basis-Image mit einer Docker-Datei verwenden?


126

Ich arbeite an einer Docker-Datei. Ich habe gerade festgestellt, dass ich die FROMganze Zeit mit indizierten Bildern gearbeitet habe.

Also frage ich mich:

  • Wie kann ich eines meiner lokalen (benutzerdefinierten) Bilder als Basisbild ( FROM) verwenden, ohne pushinges in den Index aufzunehmen?

Antworten:


147

Sie können es verwenden, ohne etwas Besonderes zu tun. Wenn Sie ein lokales Image haben blah, können Sie dies tun FROM blah. Wenn Sie das tun FROM blahin Ihrem Dockerfile, aber nicht haben ein lokales Bild genannt blah, dann wird Docker versuchen , es aus der Registrierung zu ziehen.

Mit anderen Worten, wenn eine Docker-Datei dies tut FROM ubuntu, Sie jedoch ein lokales Image haben, das ubuntusich vom offiziellen unterscheidet, wird es von Ihrem Image überschrieben.


5
funktioniert bei mir nicht - könnte ein problem mit boot2docker sein? Ich habe neueste Version 1.3.1 ... Docker nicht erscheinen zunächst lokal (oder vielleicht nicht darüber berichten) zu überprüfen , es zu ziehen aus dem Registry gerade zu versuchen , geht stackoverflow.com/q/27046118/202168
Anentropic

@Anentropic Ich verwende boot2docker 1.5. bash-4.3 $ docker images REPOSITORY TAG IMAGE ID ERSTELLTE VIRTUELLE GRÖSSE ubuntu1504gcc484 spätestens 0378ea1c0b6c vor 19 Stunden 1,36 GB Und mache "FROM ubuntu1504gcc484" in meiner anderen Docker-Datei, und das funktioniert einwandfrei. (Entschuldigung für die schlechte Formatierung)
Pejvan

Ich weiß nicht mehr, ich bin jetzt auch am 1.5
Anentropic

1
Ich habe ein Bild erstellt und es für unsere lokale Registrierung markiert. Auf diese Weise markiert, findet es nicht nur den Namen, und der vollständige Name enthält die Registrierung. Wenn Sie also auf diese Weise verweisen, wird das Tag dort abgerufen. Sie können es erneut mit der einfachen Form des Namens versehen und es wird es finden, bevor Sie in die Registrierung schauen. Hat für mich gearbeitet.
Gerry Gleason

1
Nein, das ist falsch. Docker versucht, ein Image aus einer Remote-Registrierung abzurufen, obwohl ich lokal ein Image mit demselben Namen in der Liste habe docker image list.
John Smith Optional

16

Verifiziert: Es funktioniert gut in Docker 1.7.0.

Übrigens, geben Sie --pull=truebeim Ausführen des docker buildBefehls nicht an:

Wenn Sie das lokale Image als Basis-Image verwenden möchten --pull=true, --pull=trueversuchen Sie bitte ohne die Option immer, eine neuere Version des Images abzurufen.

- https://github.com/docker/docker/issues/14943


4
Wenn Ihr Bild ein -Zeichen ( my-imagezum Beispiel) im Namen hat, wird Ihr Docker dieses Bild nicht lokal auflösen. Ich weiß nicht, warum, um es zu beheben, verwenden Sie einfach kein -Zeichen, das auf Docker-Compose 1.8 und Docker 1.11
deFreitas

1
Ich hatte kein Problem mit einem getrennten Namen Docker version 17.06.2-ce, build cec0b72, aber stellen Sie sicher, dass Sie das Tag als Teil der Bildspezifikation (FROM localimage: tag) einfügen, wenn Sie Ihr Bild markiert haben.
Scott

@deFreitas das scheint wahr zu sein, ich habe ein Bild mit Bindestrichen im Namen und Docker versucht, es aus einer Remote-Registrierung zu ziehen, obwohl ein Bild mit diesem Namen lokal vorhanden ist. Wenn sich diese Regel über Bindestriche im Namen als wahr herausstellen würde, wäre dies purer Wahnsinn.
John Smith Optional

@deFreitas: Nach meinem letzten Kommentar habe ich es mit einem Unterstrich anstelle der Bindestriche versucht und das gleiche Problem festgestellt. Docker hat versucht, das Bild trotz vorhandenem lokalen Bild von der Fernbedienung zu ziehen. In meinem Fall sind zumindest die Bindestriche nicht das Problem.
John Smith Optional

4

Sie können - Zeichen in Ihren Bildern haben. Angenommen, Sie haben ein lokales Image (keine lokale Registrierung) mit dem Namen centos-base-image mit dem Tag 7.3.1611.

docker version 
      Client:
       Version:         1.12.6
       API version:     1.24
       Package version: docker-common-1.12.6-16.el7.centos.x86_64
       Go version:      go1.7.4

      Server:
       Version:         1.12.6
       API version:     1.24
       Package version: docker-common-1.12.6-16.el7.centos.x86_64
       Go version:      go1.7.4

docker images
 REPOSITORY            TAG
 centos-base-image     7.3.1611

Dockerfile

FROM centos-base-image:7.3.1611
RUN yum -y install epel-release libaio bc flex

Ergebnis

Sending build context to Docker daemon 315.9 MB
Step 1 : FROM centos-base-image:7.3.1611
  ---> c4d84e86782e
Step 2 : RUN yum -y install epel-release libaio bc flex
  ---> Running in 36d8abd0dad9
...

Im obigen Beispiel FROMzum Abrufen Ihres lokalen Abbilds können Sie zusätzliche Anweisungen zum Abrufen eines Abbilds aus Ihrer benutzerdefinierten Registrierung (z FROM localhost:5000/my-image:with.tag. B. ) bereitstellen . Siehe https://docs.docker.com/engine/reference/commandline/pull/#pull-from-a-different-registry und https://docs.docker.com/registry/#tldr

Wenn Ihr Bild bei der Angabe eines Namens nicht aufgelöst wird, fügen Sie dem Bild beim Erstellen ein Tag hinzu

Dieser GitHub-Thread beschreibt ein ähnliches Problem, bei dem lokale Bilder nicht nach Namen gefunden werden .

Wenn Sie ein bestimmtes Tag weglassen, sucht Docker nach einem Bild mit dem Tag "Neueste". Erstellen Sie also entweder ein Bild mit dem Tag: Neueste oder ändern Sie Ihr FROM


0

Denken Sie daran, nicht nur das Tag, sondern auch das Repository, in dem sich dieses Tag befindet, folgendermaßen zu platzieren:

docker images
REPOSITORY                                TAG                       IMAGE ID            CREATED             SIZE
elixir                                    1.7-centos7_3             e15e6bf57262        20 hours ago        925MB

Sie sollten es folgendermaßen referenzieren:

elixir:1.7-centos7_3
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.