Bagaimana cara debug invalidasi cache Docker?

15

Docker memiliki cache, yang hebat, tetapi yang saya lihat di output "docker build" adalah:

---> Using cache

atau output dari perintah (yang menyiratkan itu tidak menggunakan cache).

Setelah satu langkah di Dockerfile saya (COPY), itu jelas tidak menggunakan cache. Tapi saya cukup yakin tidak ada yang berubah dalam folder yang disalin. (Ini aplikasi kami, dan saya mengalami case no-cache bahkan ketika saya menggunakan dua kali berturut-turut, misalnya.)

Apakah ada cara untuk membuat Docker memberi tahu saya apa yang menurutnya berubah?

Saya tahu Docker dulu memeriksa cap waktu untuk ini, tapi itu diperbaiki di Docker 1.8, dan saya menggunakan Docker 1.9.x di sini.

Timmay
sumber
Silakan posting AndaDockerfile
Joel E Salas
1
@ JoelESalas: Saya tidak mengerti permintaan Anda. Sesuatu yang sederhana FROM ubuntu:14.04 MAINTAINER me COPY /app/ /app/akan menunjukkan hal ini. Dan saya tidak akan memposting seluruh kode sumber dan infrastruktur saya.
Timmay
1
Selain itu, bahkan jika melihat Dockerfile bisa membantu, pertanyaannya adalah bagaimana saya mendiagnosa masalah seperti itu. Saya tidak ingin orang lain melihat konfigurasi saya dan memberi tahu saya jawabannya. Saya ingin tahu alat apa yang ada untuk membantu memecahkan masalah.
Timmay
Seberapa yakin Anda bahwa tidak ada yang berubah di direktori itu?
Joel E Salas

Jawaban:

4

Gunakan pencarian biner, dengan .dockerignore.

Tambahkan setengah file Anda ke .dockerignore, dan bangun wadah. Jika menggunakan cache untuk COPYlangkah tersebut, maka Anda tahu file yang diubah berada di set yang Anda abaikan, kalau tidak Anda tahu itu ada di setengah lainnya. Ulangi tes ini dengan kumpulan file yang memiliki perubahan, hingga hanya satu file / folder.

(Dear lazyweb: cari cara untuk memperpanjang Docker agar ini tidak terlalu menyakitkan!)

Timmay
sumber
2
Kedengarannya pendekatan yang baik untuk men-debug sesuatu secara lokal, terima kasih. Dalam kasus saya, saya saat ini mencoba untuk men-debug cache Docker di lingkungan CI, dan saya agak kecewa bahwa saya tidak bisa menemukan cara untuk membuat Docker membangun lebih banyak verbose = /
elias