Come posso utilizzare un'immagine locale come immagine di base con un dockerfile?


126

Sto lavorando a un dockerfile. Mi sono appena reso conto che ho sempre utilizzato FROMcon immagini indicizzate.

Quindi mi chiedo:

  • Come posso utilizzare una delle mie immagini locali (personalizzate) come FROMimmagine di base ( ) senza di pushingessa nell'indice?

Risposte:


148

Puoi usarlo senza fare nulla di speciale. Se hai un'immagine locale chiamata blahpuoi farlo FROM blah. Se si fare FROM blahnel vostro Dockerfile, ma non hanno un'immagine locale chiamato blah, quindi Docker proverà a tirarlo dal Registro di sistema.

In altre parole, se un Dockerfile lo fa FROM ubuntu, ma hai un'immagine locale chiamata ubuntudiversa da quella ufficiale, la tua immagine la sovrascriverà.


5
non funziona per me - potrebbe essere un problema con boot2docker? Ho ultima versione 1.3.1 ... Docker non sembra di controllare localmente prima (o forse non lo segnala) va dritto al tentativo di tirare dal registro stackoverflow.com/q/27046118/202168
Anentropic

@Anentropic sto usando boot2docker 1.5. bash-4.3 $ docker images REPOSITORY TAG ID IMMAGINE CREATO DIMENSIONI VIRTUALI ubuntu1504gcc484 latest 0378ea1c0b6c 19 ore fa 1,36 GB E facendo "FROM ubuntu1504gcc484" nel mio altro Dockerfile, e questo funziona bene. (
Ci

Non ne so più, anche adesso sono in 1.5
Anentropic

1
Ho creato un'immagine e l'ho etichettata per il nostro registro locale. Contrassegnato in questo modo, non lo trova solo con il nome e il nome completo include il registro, quindi se fai riferimento in questo modo recupererà il tag lì. Puoi taggarlo di nuovo con la semplice forma del nome e lo troverà prima di cercare nel registro. Ha funzionato per me.
Gerry Gleason

1
No, non è corretto. Docker sta cercando di estrarre un'immagine da un registro remoto nonostante io disponga di un'immagine con lo stesso nome localmente, elencata in docker image list.
John Smith Facoltativo

16

Verificato: funziona bene in Docker 1.7.0.

BTW, non specificare --pull=truedurante l'esecuzione del docker buildcomando:

se si desidera utilizzare l'immagine locale come immagine di base, senza l'opzione --pull=true, --pull=truetenterà sempre di estrarre una versione più recente dell'immagine.

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


4
Se la tua immagine ha un -carattere ( my-imagead esempio) nel nome, la finestra mobile non risolverà questa immagine localmente, non so perché, comunque per risolverla semplicemente non usare il -carattere, testato su docker-compose 1.8 e
docker

1
Non ho avuto problemi con un nome con trattino acceso Docker version 17.06.2-ce, build cec0b72, ma assicurati di includere il tag come parte della specifica dell'immagine (FROM localimage: tag) se hai taggato la tua immagine.
Scott

@deFreitas sembra essere vero, ho un'immagine con trattini nel nome e Docker sta cercando di estrarla da un registro remoto nonostante un'immagine con quel nome esistente localmente. Se questa regola sui trattini nel nome si rivelasse vera, sarebbe pura follia.
John Smith Facoltativo

@deFreitas: dopo il mio ultimo commento, ho provato con il carattere di sottolineatura invece dei trattini e ho ottenuto lo stesso problema, docker che cercava di estrarre l'immagine da remoto nonostante fosse presente l'immagine locale. Nel mio caso almeno i trattini non sono il problema.
John Smith Opzionale

4

Puoi avere - personaggi nelle tue immagini. Supponiamo di avere un'immagine locale (non un registro locale) denominata centos-base-image con 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

Risultato

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

Nell'esempio sopra FROM è il recupero della tua immagine locale, puoi fornire istruzioni aggiuntive per recuperare un'immagine dal tuo registro personalizzato (ad esempio FROM localhost:5000/my-image:with.tag). Vedi https://docs.docker.com/engine/reference/commandline/pull/#pull-from-a-different-registry e https://docs.docker.com/registry/#tldr

Infine, se la tua immagine non viene risolta quando fornisci un nome, prova ad aggiungere un tag all'immagine quando la crei

Questo thread di GitHub descrive un problema simile di non trovare immagini locali per nome .

Omettendo un tag specifico, docker cercherà un'immagine contrassegnata con "latest", quindi crea un'immagine con il tag: latest o cambia il tuo FROM


0

Ricorda di inserire non solo il tag ma anche il repository in cui si trova quel tag, in questo modo:

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

Dovresti fare riferimento in questo modo:

elixir:1.7-centos7_3
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.