จะดีบักการทำให้แคชใช้ไม่ได้ของ Docker อย่างไร


15

นักเทียบท่ามีแคชซึ่งยอดเยี่ยม แต่สิ่งที่ฉันเห็นในเอาต์พุต "นักสร้างพอร์ต" คือ:

---> Using cache

หรือเอาต์พุตของคำสั่ง (ซึ่งบอกเป็นนัยว่าไม่ได้ใช้แคช)

หลังจากหนึ่งขั้นตอนใน Dockerfile ของฉัน (สำเนา) มันชัดเจนว่าไม่ได้ใช้แคช แต่ฉันค่อนข้างแน่ใจว่าไม่มีอะไรเปลี่ยนแปลงในโฟลเดอร์ที่คัดลอก (มันเป็นแอพพลิเคชั่นของเราและฉันวิ่งเข้าไปในเคสที่ไม่มีแคชแม้ว่าเมื่อฉันปรับใช้สองครั้งในแถวเป็นต้น)

มีวิธีใดที่จะให้นักเทียบท่าบอกฉันว่ามันคิดว่าเปลี่ยนไปหรือไม่?

ฉันรู้ว่า Docker เคยตรวจสอบการประทับเวลาสำหรับสิ่งนี้ แต่นั่นได้รับการแก้ไขใน Docker 1.8 และฉันอยู่ที่ Docker 1.9.x ที่นี่


กรุณาโพสต์ของคุณDockerfile
Joel E Salas

1
@ JoelESalas: ฉันไม่เข้าใจคำขอของคุณ บางอย่างเรียบง่ายอย่างที่FROM ubuntu:14.04 MAINTAINER me COPY /app/ /app/จะแสดงให้เห็นถึงสิ่งนี้ และฉันจะไม่โพสต์ซอร์สโค้ดและโครงสร้างพื้นฐานทั้งหมดของฉัน
Timmay

1
นอกจากนี้แม้ว่าการดูที่ Dockerfile จะสามารถช่วยได้คำถามก็คือฉันจะวินิจฉัยปัญหาเหล่านี้ได้อย่างไร ฉันไม่ต้องการให้คนอื่นดูที่ config ของฉันและบอกคำตอบให้ฉัน ฉันต้องการทราบว่ามีเครื่องมือใดบ้างที่จะช่วยแก้ปัญหานี้
Timmay

คุณแน่ใจได้อย่างไรว่าไม่มีสิ่งใดเปลี่ยนแปลงในไดเรกทอรีนั้น
Joel E Salas

คำตอบ:


4

.dockerignoreใช้การค้นหาแบบไบนารีด้วย

เพิ่มไฟล์ของคุณครึ่งหนึ่ง.dockerignoreและสร้างคอนเทนเนอร์ หากใช้แคชสำหรับCOPYขั้นตอนคุณจะรู้ว่าไฟล์ที่เปลี่ยนแปลงนั้นอยู่ในชุดที่คุณเพิกเฉยมิฉะนั้นคุณจะรู้ว่าไฟล์นั้นอยู่ในอีกครึ่งหนึ่ง ทำซ้ำการทดสอบนี้กับชุดของไฟล์ที่มีการเปลี่ยนแปลงจนกว่าจะเป็นเพียงหนึ่งไฟล์ / โฟลเดอร์

(เรียนคนขี้เกียจ: ลองหาวิธีที่จะขยาย Docker ให้เจ็บปวดน้อยลง!)


2
ฟังดูเป็นวิธีที่ดีสำหรับการแก้ไขข้อบกพร่องบางอย่างในเครื่องขอบคุณ ในกรณีของฉันตอนนี้ฉันกำลังพยายามดีบั๊กแคชนักเทียบท่าในสภาพแวดล้อม CI และฉันรู้สึกอึดอัดใจเล็กน้อยที่ฉันไม่สามารถหาวิธีที่จะทำให้นักเทียบท่าสร้าง verbose มากขึ้น = /
elias
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.