Comment déboguer l'invalidation du cache Docker?

15

Docker a un cache, ce qui est génial, mais tout ce que je vois dans la sortie "Docker Build" est soit:

---> Using cache

ou la sortie de la commande (ce qui implique qu'elle n'utilise pas le cache).

Après une étape dans mon Dockerfile (une COPIE), il n'utilise clairement pas le cache. Mais je suis pratiquement certain que rien n'a changé dans le dossier qu'il copie. (C'est notre application, et je rencontre le cas sans cache même lorsque je déploie deux fois de suite, par exemple.)

Existe-t-il un moyen pour que Docker me dise ce qu'il pense avoir changé?

Je sais que Docker vérifiait les horodatages pour cela, mais cela a été corrigé dans Docker 1.8, et je suis sur Docker 1.9.x ici.

Timmay
la source
Veuillez poster votreDockerfile
Joel E Salas
1
@JoelESalas: Je ne comprends pas votre demande. Quelque chose d'aussi simple que FROM ubuntu:14.04 MAINTAINER me COPY /app/ /app/cela le démontrera. Et je ne vais pas publier l'intégralité de mon code source et de mon infrastructure.
Timmay
1
D' ailleurs, même si regarder le Dockerfile pourrait aider, la question était de savoir comment puis- je diagnostiquer ces problèmes. Je ne veux pas que quelqu'un d'autre regarde ma configuration et me dise la réponse. Je veux savoir quels outils existent pour aider à résoudre le problème.
Timmay
Êtes-vous sûr que rien ne change dans ce répertoire?
Joel E Salas

Réponses:

4

Utilisez la recherche binaire, avec .dockerignore.

Ajoutez la moitié de vos fichiers .dockerignoreet créez le conteneur. S'il utilise le cache pour l' COPYétape, vous savez que les fichiers modifiés se trouvent dans l'ensemble que vous avez ignoré, sinon vous savez qu'il se trouve dans l'autre moitié. Répétez ce test avec l'ensemble de fichiers qui a la modification, jusqu'à ce qu'il ne s'agisse que d'un fichier / dossier.

(Cher lazyweb: trouvez un moyen d'étendre Docker pour rendre cela moins douloureux!)

Timmay
la source
2
Sonne une approche correcte pour déboguer quelque chose localement, merci. Dans mon cas, j'essaie actuellement de déboguer le cache Docker dans un environnement CI, et je suis un peu déçu que je n'arrive pas à trouver un moyen de rendre la construction Docker plus verbeuse = /
elias