web-dev-qa-db-fra.com

Extraire des images de docker d'un référentiel privé pendant la construction de docker?

Existe-t-il un moyen d'extraire des images d'un registre privé lors d'un docker build Au lieu d'un docker hub?

J'ai déployé un registre privé et je voudrais pouvoir éviter de nommer son ip:port Spécifique dans l'instruction FROM du Dockerfile. Je m'attendais à ce qu'une option docker build Ou une variable d'environnement docker modifie le registre par défaut.

17
Julio Guerra

J'étais confronté au même problème en 2019. J'ai résolu ce problème en utilisant des arguments (ARG).
https://docs.docker.com/engine/reference/builder/#understand-how-arg-and-from-interact
Les arguments vous permettent de définir des paramètres facultatifs (par défaut) qui peuvent être utilisés dans votre ligne FROM.

Dockerfile-project-dev

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

Pour mon cas d'utilisation, je veux normalement tirer du dépôt privé, mais si je travaille sur les Dockerfiles, je peux vouloir pouvoir construire à partir d'une image sur ma propre machine, sans avoir à modifier la ligne FROM dans mon Dockerfile . Pour dire à Docker de rechercher l'image sur ma machine locale au moment de la construction, je procéderais comme suit:

docker build -t project/dev:latest -f ./Dockerfile-project-dev --build-arg REPO_LOCATION='' .
2
Matt L

Le nom de l'image doit inclure le nom de domaine complet de l'hôte de registre. Donc, si vous voulez FROM <some private image> vous devez le spécifier comme FROM registry_Host:5000/foo/bar

À l'avenir, ce ne sera pas une exigence, mais malheureusement pour le moment.

16
cpuguy83

Les dockers veulent généralement s’assurer que si vous exécutez docker pull foo/bar vous obtiendrez la même chose (par exemple, le foo/bar image de Docker Hub) quel que soit votre environnement local.

Cela signifie qu'aucune option n'est disponible pour que Docker utilise autre chose sans nom d'hôte/port explicite.

8
larsks