Как я могу использовать локальный образ в качестве базового образа с файлом докеров?

127

Я работаю над dockerfile. Я только что понял, что все время использовал FROMиндексированные изображения.

Поэтому мне интересно:

  • Как я могу использовать одно из моих локальных (пользовательских) изображений в качестве образа base ( FROM) без pushingего включения в индекс?
Фил
источник

Ответы:

150

Вы можете использовать его, не делая ничего особенного. Если у вас есть локальный образ, blahвы можете это сделать FROM blah. Если вы это делаете FROM blahв своем Dockerfile, но не вызываете локальный образ blah, тогда Docker будет пытаться вытащить его из реестра.

Другими словами, если Dockerfile есть FROM ubuntu, но у вас есть локальный образ, который называется ubuntuотличным от официального, ваш образ переопределит его.

jpetazzo
источник
5
у меня не работает - может проблема с boot2docker? У меня последняя версия 1.3.1 ... Docker, похоже, сначала не проверяет локально (или, может быть, не сообщает об этом), он сразу же пытается
извлечь
@Anentropic Я использую boot2docker 1.5. bash-4.3 $ docker images ТЕГ РЕПОЗИТОРА ИДЕНТИФИКАТОР ИЗОБРАЖЕНИЯ СОЗДАН ВИРТУАЛЬНЫЙ РАЗМЕР ubuntu1504gcc484 последнее 0378ea1c0b6c 19 часов назад 1,36 ГБ И выполняю "FROM ubuntu1504gcc484" в моем другом Dockerfile, и это отлично работает. (Извинения за плохое форматирование)
Пейван
Я больше не знаю, я тоже сейчас на 1.5
Anentropic
1
Я создал образ и пометил его для нашего локального реестра. Помеченный таким образом, он не находит его только по имени, а полное имя включает в себя реестр, поэтому, если вы ссылаетесь таким образом, он получит тег там. Вы можете пометить его снова простой формой имени, и он найдет его, прежде чем искать в реестре. Работал у меня.
Джерри Глисон
1
Нет, это неверно. Docker пытается получить образ из удаленного реестра, несмотря на то, что у меня есть образ с таким же именем локально, указанный в docker image list.
Джон Смит Необязательно,
16

Проверено: хорошо работает в Docker 1.7.0.

Кстати, не указывайте --pull=trueпри запуске docker buildкоманды:

если вы хотите использовать локальное изображение в качестве основного изображения, пожалуйста , без опции --pull=true, --pull=trueвсегда будет пытаться тянуть новую версию изображения.

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

Dmitriusan
источник
4
Если ваше изображение имеет -символ ( my-imageнапример) в имени, тогда ваш докер не будет разрешать это изображение локально, я не знаю, почему, в любом случае, чтобы исправить это, просто не используйте -символ, протестированный на docker-compose 1.8 и docker 1.11
deFreitas
1
У меня не было проблем с именем через дефис Docker version 17.06.2-ce, build cec0b72, но убедитесь, что если вы отметили свое изображение, вы включили этот тег как часть спецификации изображения (FROM localimage: tag).
Скотт
@deFreitas, что кажется правдой, у меня есть образ с дефисами в имени, и Docker пытается вытащить его из удаленного реестра, несмотря на то, что образ с таким именем существует локально. Если бы это правило о дефисах в имени оказалось верным, это было бы чистым безумием.
Джон Смит Необязательно
@deFreitas: после моего последнего комментария я попытался использовать подчеркивание вместо дефисов и получил ту же проблему, докер пытался вытащить изображение с пульта, несмотря на наличие локального образа. В моем случае проблема не в дефисах.
Джон Смит Необязательно,
4

Вы можете иметь символы - на ваших изображениях. Предположим, у вас есть локальный образ (не локальный реестр) с именем centos-base-image с тегом 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

результат

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

В приведенном выше примере FROMполучения вашего локального образа вы можете предоставить дополнительные инструкции для получения образа из вашего настраиваемого реестра (например FROM localhost:5000/my-image:with.tag). См. Https://docs.docker.com/engine/reference/commandline/pull/#pull-from-a-different-registry и https://docs.docker.com/registry/#tldr.

Наконец, если ваше изображение не разрешается при указании имени, попробуйте добавить тег к изображению при его создании.

В этой ветке GitHub описывается аналогичная проблема отсутствия локальных изображений по имени .

Опуская конкретный тег, docker будет искать изображение с тегом "latest", поэтому либо создайте изображение с тегом: latest, либо измените свой FROM

steven87vt
источник
0

Не забудьте поместить не только тег, но и репозиторий, в котором этот тег находится, следующим образом:

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

Вы должны ссылаться на это так:

elixir:1.7-centos7_3
Ровинсон Гальего
источник