Como posso usar uma imagem local como imagem base em um arquivo docker?


126

Estou trabalhando em um arquivo docker. Acabei de perceber que tenho usado FROMimagens indexadas o tempo todo.

Então eu me pergunto:

  • Como posso usar uma das minhas imagens locais (personalizadas) como minha imagem base ( FROM) sem pushingela no índice?

Respostas:


148

Você pode usá-lo sem fazer nada de especial. Se você tem uma imagem local chamada, blahvocê pode fazer FROM blah. Se você fizer FROM blahem sua Dockerfile, mas não têm uma imagem local chamado blah, em seguida, Docker vai tentar retirá-lo do registro.

Em outras palavras, se um Dockerfile tiver FROM ubuntu, mas você tiver uma imagem local chamada ubuntudiferente da oficial, sua imagem a substituirá.


5
não funciona para mim - poderia ser um problema com o boot2docker? Eu tenho a versão mais recente 1.3.1 ... O Docker não parece verificar localmente primeiro (ou talvez não o relate), ele vai direto para a tentativa de extrair do registro stackoverflow.com/q/27046118/202168
Anentropic

@Anentropic Estou usando o boot2docker 1.5. bash-4.3 $ docker images ID DE IMAGEM DE REPOSITÓRIO TAG CRIADO TAMANHO VIRTUAL ubuntu1504gcc484 mais recente 0378ea1c0b6c 19 horas atrás 1,36 GB E executando "FROM ubuntu1504gcc484" no meu outro Dockerfile, e isso funciona muito bem. (Apologias para o pobre formatação)
Pejvan

Não sei mais, agora também estou no 1.5
Anentropic 21/15

1
Criei uma imagem e a marquei em nosso registro local. Marcado dessa maneira, ele não o encontra apenas com o nome, e o nome completo inclui o registro, portanto, se você fizer referência dessa maneira, ele buscará a tag lá. Você pode marcá-lo novamente com a forma simples do nome e ele será encontrado antes de procurar no registro. Trabalhou para mim.
Gerry Gleason

1
Não, isso está incorreto. O Docker está tentando extrair uma imagem de um registro remoto, apesar de eu ter uma imagem com o mesmo nome localmente, listada em docker image list.
John Smith Opcional

16

Verificado: funciona bem no Docker 1.7.0.

BTW, não especifique --pull=trueao executar o docker buildcomando:

se você quiser usar a imagem local como imagem de base, sem a opção --pull=true, --pull=truesempre tentará obter uma versão mais recente da imagem.

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


4
Se sua imagem tiver um -caractere ( my-imagepor exemplo) no nome, sua janela de encaixe não a resolverá localmente, não sei por que, de qualquer maneira, para corrigi-la, simplesmente não use -caracteres, testados no docker-compose 1.8 e docker 1.11
deFreitas

1
Não tive nenhum problema com um nome com hífen Docker version 17.06.2-ce, build cec0b72, mas verifique se você etiquetou sua imagem e incluiu a tag como parte da especificação da imagem (FROM localimage: tag).
Scott

@deFreitas que parece ser verdade, eu tenho uma imagem com hífens no nome e o Docker está tentando extraí-la de um registro remoto, apesar de uma imagem com esse nome existir localmente. Se essa regra sobre hífens no nome fosse verdadeira, isso seria pura loucura.
John Smith Opcional

@deFreitas: após o meu último comentário, tentei sublinhar os hífens e tive o mesmo problema, o docker tentando retirar a imagem do controle remoto, apesar da imagem local presente. No meu caso, pelo menos os hífens não são o problema.
John Smith Opcional

4

Você pode ter - caracteres em suas imagens. Suponha que você tenha uma imagem local (não um registro local) chamada centos-base-image com a 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

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

No exemplo acima, FROMestá buscando sua imagem local, você pode fornecer instruções adicionais para buscar uma imagem do seu registro personalizado (por exemplo FROM localhost:5000/my-image:with.tag). Consulte https://docs.docker.com/engine/reference/commandline/pull/#pull-from-a-different-registry e https://docs.docker.com/registry/#tldr

Por fim, se sua imagem não estiver sendo resolvida ao fornecer um nome, tente adicionar uma tag à imagem ao criá-la

Este segmento do GitHub descreve um problema semelhante de não encontrar imagens locais por nome .

Ao omitir uma tag específica, o docker procurará uma imagem com a tag "mais recente"; portanto, crie uma imagem com a tag: latest ou altere seu FROM


0

Lembre-se de colocar não apenas a tag, mas também o repositório em que ela está, desta maneira:

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

Você deve referenciá-lo desta maneira:

elixir:1.7-centos7_3
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.