Як я можу використовувати локальне зображення як базове зображення з докерфайлом?


126

Я працюю над докерфайлом. Я щойно зрозумів, що FROMвесь час використовую з індексованими зображеннями.

Тож мені цікаво:

  • Як я можу використати одне із своїх локальних (користувацьких) зображень як базове ( FROM) зображення без pushingйого вказівника?

Відповіді:


148

Ви можете використовувати його, не роблячи нічого особливого. Якщо у вас є місцеве зображення, яке називається, blahви можете зробити FROM blah. Якщо ви є FROM blahу своєму Dockerfile, але у вас немає локального зображення blah, то Docker намагатиметься витягнути його з реєстру.

Іншими словами, якщо Dockerfile робить FROM ubuntu, але у вас є місцеве зображення, яке називається ubuntuвідмінним від офіційного, ваше зображення замінить його.


5
не працює для мене - може бути проблема з boot2docker? У мене є остання версія 1.3.1 ... Docker не виникає , щоб перевірити на місці першого (або , можливо , не повідомляти про це) він йде прямо до спроби витягнути з реєстру stackoverflow.com/q/27046118/202168
Anentropic

@Anentropic Я використовую boot2docker 1.5. bash-4.3 $ docker images REPOSITORY TAG IMAGE ID CREEDED VIRTUAL SIZE ubuntu1504gcc484 останній 0378ea1c0b6c 19 годин тому 1,36 ГБ. Виконуючи "ВІД ubuntu1504gcc484" в моєму іншому Dockerfile, і це працює чудово. (Вибачення за неякісне форматування)
Pejvan

Я більше не знаю, я також зараз 1,5
Анентропний

1
Я створив зображення та позначив його для нашого місцевого реєстру. Позначений таким чином, він не знаходить його тільки з назвою, а повне ім'я включає реєстр, тому якщо ви посилаєтесь на це, він отримає тег там. Ви можете знову позначити його простою формою імені, і він знайде його, перш ніж звернутися до реєстру. Працювали для мене.
Джеррі Глісон

1
Ні, це неправильно. Docker намагається витягнути зображення з віддаленого реєстру, незважаючи на те, що у мене є місце з таким самим ім’ям, що вказане в docker image list.
Джон Сміт за бажанням

16

Перевірено: він добре працює в Docker 1.7.0.

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

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

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


4
Якщо ваше зображення має -символ ( my-imageнаприклад) в імені, то ваш докер не вирішить це зображення локально, я не знаю, чому все-таки виправити його просто не використовуйте -символи, протестовані на docker-compose 1.8 та
docker

1
У мене не було проблем із ввімкненим дефісом Docker version 17.06.2-ce, build cec0b72, але переконайтесь, що якщо ви позначили своє зображення, ви включите тег як частину специфікації зображення (FROM localimage: tag).
Скотт

@deFreitas, що здається правдою, у мене є зображення з дефісами в імені, і Докер намагається витягнути його з віддаленого реєстру, незважаючи на зображення з таким ім'ям, яке існує локально. Якби це правило про дефіси в імені виявилося правдивим, це було б чистим божевіллям.
Джон Сміт за бажанням

@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

Докерфайл

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 описує аналогічну проблему не знаходження локальних зображень за назвою .

Опустивши певний тег, докер шукатиме зображення з тегом "останнє", тому або створіть зображення з тегом: остання, або змініть свій ВІД


0

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

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

Вам слід посилатися на це так:

elixir:1.7-centos7_3
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.