Как попросить докер вытащить из частного репозитория при сборке

Есть ли способ вытащить изображения из частного реестра во время docker build вместо докера?

Я развернул частный реестр, и я хотел бы иметь возможность избежать имен его конкретных ip:port в докерфайле FROM инструкция. Я ожидал docker build option или переменная окружения docker для изменения реестра по умолчанию.

2 ответа

Решение

Обычно докеры хотят убедиться, что если вы запустите docker pull foo/bar вы получите то же самое (то есть, foo/bar изображение из Docker Hub) независимо от вашей локальной среды.

Это означает, что нет доступных опций, чтобы Docker использовал что-либо еще без явного имени хоста / порта.

Имя образа должно включать полное доменное имя хоста реестра. Так что если вы хотите FROM <some private image> Вы должны указать это как FROM registry_host:5000/foo/bar

В будущем это не будет требованием, но, к сожалению, пока это так.

Я столкнулся с той же проблемой в 2019 году. Я решил ее с помощью аргументов (ARG).
https://docs.docker.com/engine/reference/builder/
Аргументы позволяют вам устанавливать дополнительные параметры (со значениями по умолчанию), которые можно использовать в вашей строке FROM.

Dockerfile-проект-dev

ARG REPO_LOCATION=privaterepo.company.net/
ARG BASE_VERSION=latest
FROM ${REPO_LOCATION}project/base:${BASE_VERSION}
...

Для моего варианта использования я обычно хочу использовать частное репо, но если я работаю с Dockerfiles, я могу захотеть построить из образа на моем собственном компьютере без необходимости изменять строку FROM в моем Dockerfile.. Чтобы сообщить Docker о поиске образа на моем локальном компьютере во время сборки, я бы сделал следующее:

docker build -t project/dev:latest -f ./Dockerfile-project-dev --build-arg REPO_LOCATION='' .
Другие вопросы по тегам