¿Cómo puedo usar una imagen local como imagen base con un dockerfile?

126

Estoy trabajando en un dockerfile. Me acabo de dar cuenta de que he estado usando FROMimágenes indexadas todo el tiempo.

Entonces me pregunto:

  • ¿Cómo puedo usar una de mis imágenes locales (personalizadas) como mi imagen base ( FROM) sin pushingque aparezca en el índice?
Phil
fuente

Respuestas:

148

Puedes usarlo sin hacer nada especial. Si tiene una imagen local llamada blahque puede hacer FROM blah. Si lo hace FROM blahen su Dockerfile, pero no tiene una imagen local llamada blah, entonces Docker intentará extraerlo del registro.

En otras palabras, si un Dockerfile lo hace FROM ubuntu, pero tiene una imagen local llamada ubuntudiferente de la oficial, su imagen la anulará.

jpetazzo
fuente
55
no funciona para mí, ¿podría ser un problema con boot2docker? Tengo la última versión 1.3.1 ... Docker no parece verificar primero localmente (o tal vez no lo informa), va directamente a intentar extraerlo del registro stackoverflow.com/q/27046118/202168
Anentropic
@Anentropic Estoy usando boot2docker 1.5. bash-4.3 $ docker images REPOSITORY TAG ID DE IMAGEN CREADA TAMAÑO VIRTUAL ubuntu1504gcc484 último 0378ea1c0b6c hace 19 horas 1.36 GB Y haciendo "DESDE ubuntu1504gcc484" en mi otro Dockerfile, y esto funciona bien. (Disculpas por el mal formato)
Pejvan
Ya no sé, también estoy en 1.5
Anentropic
1
Creé una imagen y la etiqueté para nuestro registro local. Etiquetado de esa manera, no lo encuentra solo con el nombre, y el nombre completo incluye el registro, por lo que si hace referencia de esa manera, obtendrá la etiqueta allí. Puede etiquetarlo nuevamente con la forma simple del nombre y lo encontrará antes de buscar en el registro. Trabajó para mi.
Gerry Gleason
1
No, esto es incorrecto. Docker está tratando de extraer una imagen de un registro remoto a pesar del hecho de que tengo una imagen con el mismo nombre local, incluida en la lista docker image list.
John Smith Opcional
16

Verificado: funciona bien en Docker 1.7.0.

Por cierto, no especifiques --pull=truecuando ejecutes el docker buildcomando:

si desea utilizar la imagen local como imagen base, sin la opción --pull=true, --pull=truesiempre intentará obtener una versión más nueva de la imagen.

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

Dmitriusan
fuente
44
Si su imagen tiene un -carácter ( my-imagepor ejemplo) en el nombre, su ventana acoplable no resolverá esta imagen localmente, no sé por qué, de todos modos, para solucionarlo, simplemente no use el -carácter, probado en docker-compose 1.8 y docker 1.11
deFreitas
1
No tuve ningún problema con un nombre con guión Docker version 17.06.2-ce, build cec0b72, pero asegúrese de que si etiquetó su imagen, incluya la etiqueta como parte de la especificación de la imagen (FROM localimage: tag).
Scott
@deFreitas que parece ser cierto, tengo una imagen con guiones en el nombre y Docker está tratando de extraerlo de un registro remoto a pesar de una imagen con ese nombre existente localmente. Si esta regla sobre guiones en el nombre resultara cierta, esto sería pura locura.
John Smith Opcional
@deFreitas: después de mi último comentario, intenté con guiones bajos de guiones y obtuve el mismo problema, docker tratando de extraer la imagen del control remoto a pesar de la imagen local presente. En mi caso, al menos los guiones no son el problema.
John Smith Opcional
4

Puedes tener personajes en tus imágenes. Suponga que tiene una imagen local (no un registro local) llamada centos-base-image con la etiqueta 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

Resultado

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

En el ejemplo anterior se FROMtrata de recuperar su imagen local, puede proporcionar instrucciones adicionales para recuperar una imagen de su registro personalizado (por ejemplo FROM localhost:5000/my-image:with.tag). Ver https://docs.docker.com/engine/reference/commandline/pull/#pull-from-a-different-registry y https://docs.docker.com/registry/#tldr

Finalmente, si su imagen no se resuelve al proporcionar un nombre, intente agregar una etiqueta a la imagen cuando la cree

Este hilo de GitHub describe un problema similar de no encontrar imágenes locales por nombre .

Al omitir una etiqueta específica, la ventana acoplable buscará una imagen etiquetada como "más reciente", por lo tanto, cree una imagen con: la etiqueta más reciente o cambie su

steven87vt
fuente
0

Recuerde poner no solo la etiqueta sino también el repositorio en el que se encuentra esa etiqueta, de esta manera:

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

Debes referenciarlo de esta manera:

elixir:1.7-centos7_3
Rowinson Gallego
fuente