web-dev-qa-db-fra.com

Comment résoudre le problème "Impossible de récupérer le fichier ID depuis le menu fixe" lors de la création d'une image Docker à l'aide du pipeline Jenkins

J'utilise un pipeline Jenkins pour créer un fichier Docker. 

Le fichier de docker réussit toutes les étapes et crée l'image de docker.

Comme montré:

Step 16/19 : FROM base AS final
 ---> <id>
Step 17/19 : WORKDIR /app
 ---> Using cache
 ---> <id>
Step 18/19 : COPY --from=publish /app .
 ---> Using cache
 ---> <id>
Step 19/19 : ENTRYPOINT ["", "myapp.dll"]
 ---> Using cache
 ---> <id>
Successfully built cb3y81938e88
Successfully tagged myapp:latest

Cependant, après cela, le shell échoue avec l'erreur suivante:

Java.io.IOException: Cannot retrieve .Id from 'docker inspect base AS final'

Pourquoi jette-t-il cette erreur en dépit de la construction réussie de l'image de menu fixe? Lorsque j'exécute cette opération sur mon ordinateur local, la commande se ferme sur "Mappée avec succès myapp: latest"

Ma version de docker est 18.03.1-ce.

Toute aide sur ce sujet serait grandement appréciée!

12
fuzzi

Il semble qu'il y ait un bug dans ce plugin Jenkins.

Vous pouvez essayer de supprimer le nom de construction multi-étage ("AS final" car vous n'en avez pas besoin):

FROM base
(....)

Mais si vous avez vraiment besoin de référencer une image construite précédente (multi-étapes), une solution de contournement peut utiliser --copy-from 0 (0,1,2 comme il correspond, au lieu du nom d'alias)

Problèmes liés à Jenkins


Modifier

Documenter ici la solution trouvée par l'OP:

Cela fonctionne en n'utilisant pas le fichier de pipeline Jenkinsfile, mais en exécutant un shell dans le travail Jenkins pour exécuter la commande de génération Docker. (docker build -t latest-build.)

13
Robert

J'ai rencontré le même problème avec Docker 18.09, mais je n'utilisais pas de construction à plusieurs étages. Dans mon cas, je devenais:

Java.io.IOException: Cannot retrieve .Id from 'docker inspect centos:7'

La première étape de mon fichier Dockerfile était la suivante:

FROM centos:7

J'ai pu résoudre le problème avec docker pull centos:7; Après cela, la construction de Jenkins a pu se terminer avec succès.

0
Andrew Schlei

Sur ma situation spécifique, mes Jenkins avaient deux nœuds, maître et esclave. Lorsque le travail exécuté sur le noeud esclave, le travail a échoué. Lorsqu'il est exécuté sur le noeud principal, le travail est exécuté avec succès.

Comment exécuter un travail Jenkins sur un noeud spécifique à l'aide de Jenkinsfile? Exemple:

node('master') {}
0
Janderson Silva