Как попросить докер вытащить из частного репозитория при сборке
Есть ли способ вытащить изображения из частного реестра во время 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='' .