เปลี่ยนคำสั่งไดเรกทอรีใน Docker หรือไม่


214

ในนักเทียบท่าฉันต้องการทำสิ่งนี้:

git clone XYZ
cd XYZ
make XYZ

อย่างไรก็ตามเนื่องจากไม่มีคำสั่ง cd ฉันต้องผ่านเส้นทางแบบเต็มทุกครั้ง (ทำ XYZ / fullpath) มีวิธีแก้ปัญหาที่ดีสำหรับสิ่งนี้หรือไม่?


เกี่ยวข้อง: stackoverflow.com/questions/17891669/…
trcarden

6
คำสั่ง WORKDIR ถูกบันทึกเป็นวิธีแก้ไขที่เป็นไปได้เช่นกัน
trcarden

1
ไม่ใช่วิธีแก้ปัญหามันเป็นทางออกที่แนะนำdocs.docker.com/engine/userguide/eng-image/ …
John John Pichler

คำตอบ:


151

คุณสามารถเรียกใช้สคริปต์หรือพารามิเตอร์ที่ซับซ้อนมากขึ้นเพื่อ RUN นี่คือตัวอย่างจาก Dockerfile ที่ฉันดาวน์โหลดเพื่อดูก่อนหน้านี้:

RUN cd /opt && unzip treeio.zip && mv treeio-master treeio && \
    rm -f treeio.zip && cd treeio && pip install -r requirements.pip

เนื่องจากการใช้ '&&' จะได้รับคำสั่ง 'pip install' สุดท้ายเท่านั้นหากคำสั่งก่อนหน้าทั้งหมดประสบความสำเร็จ

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


98
ในกรณีที่คุณสงสัยผลของสิ่งcdเดียวจะคงอยู่สำหรับRUNคำสั่งปัจจุบัน ต่อไปจะเริ่มต้นจากปัจจุบันRUN WORKDIR
Ritchie

531

การเปลี่ยนไปใช้ไดเรกทอรีอื่นWORKDIR คำสั่ง RUN, CMD และ ENTRYPOINT ทั้งหมดหลังจาก WORKDIR จะถูกเรียกใช้จากไดเรกทอรีนั้น

RUN git clone XYZ 
WORKDIR "/XYZ"
RUN make

40
การใช้ WORKDIR นั้นก็อ้างว่าเป็นแนวปฏิบัติที่ดีที่สุดสำหรับ dockerfile
Martin Woolstenhulme

14
ฉันเชื่อว่านี่เป็นคำตอบที่เหมาะสมกว่าสำหรับคำถาม
Juan Leni

1
โปรดทราบว่านี่จะสร้างหลายเลเยอร์ (ฉันคิดว่า?)
Sebi

นี่ควรเป็นคำตอบที่ยอมรับได้ ผ่านการทดสอบและสามารถยืนยันการใช้งานได้
user1258361

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.