WORKDIR เริ่มต้นใน Docker คืออะไร?


88

เราสามารถใช้WORKDIRตั้งไดเร็กทอรีเป็น work directory ได้Dockerfileแต่ถ้าเราไม่ตั้งค่า default จะเป็นเท่าไร?


2
เพียงเรียกใช้ Dockerfile แบบบรรทัดเดียวด้วยRUN pwd
kilgoretrout

คำตอบ:



32

ค่าเริ่มต้นเป็นไป/ตามที่ระบุไว้ที่อื่น เป็นเรื่องที่ควรค่าแก่การกล่าวถึงว่าคุณแทบจะไม่ได้ใช้งานจากอิมเมจนักเทียบท่าที่ว่างเปล่า ( FROM scratch) ดังนั้นจึงWORKDIRน่าจะถูกกำหนดโดยอิมเมจพื้นฐานที่คุณใช้

ยกตัวอย่างเช่นhttps://github.com/docker-library/tomcat/blob/master/Dockerfile-alpine.templateมีWORKDIR $CATALINA_HOMEและhttps://github.com/dockerfile/ubuntu/blob/master/DockerfileWORKDIR /rootมี ( https://hub.docker.com/r/base/archlinux/~/dockerfile/ไม่ได้ใช้WORKDIR)

ดังนั้นจึงเป็นการดีที่สุดที่จะตั้งค่าของคุณเองWORKDIRอย่างชัดเจน


14

ไดเร็กทอรีการทำงานเริ่มต้นสำหรับการรันไบนารีภายในคอนเทนเนอร์คือไดเร็กทอรีราก ( /) แต่ผู้พัฒนาสามารถตั้งค่าไดเร็กทอรีอื่นด้วยคำสั่ง Dockerfile WORKDIR ตัวดำเนินการสามารถแทนที่สิ่งนี้ด้วย:

-w="": Working directory inside the container

ที่นี่: https://docs.docker.com/engine/reference/run/#workdir


6

เนื่องจากไม่มีผู้ใช้ แต่รูทในนักเทียบท่าที่เพิ่งเกิดหรือคอนเทนเนอร์พูดอย่างเคร่งครัด ดังนั้นสำหรับการเปลี่ยนแปลงทุกครั้งจะมีการกระทำสำหรับคอนเทนเนอร์นั้นตามที่ผู้ชายคนนี้พูด ดังนั้น pwd ของสิ่งนั้นหรือตามที่คุณถาม WORKDIR จึงเป็น/ รูทโดยค่าเริ่มต้นและทุกครั้งที่คุณดำเนินการ/bin/bashดังนี้:

$docker exec -i -t 53f784fwer54 /bin/bash

บนคอนเทนเนอร์ที่กำลังทำงานอยู่มันจะทำให้คุณอยู่ที่นี่/ในรูท dir


คำตอบของคุณไม่เพียง แต่นอกประเด็นเท่านั้น แต่มันผิดธรรมดา ประการแรกคำถามคือ WORKDIR เริ่มต้นของ IMAGE คืออะไรหากไม่ได้ตั้งค่าไว้อย่างชัดเจนใน Dockerfile คำตอบของคุณที่บอกว่า workdir เริ่มต้นของ CONTAINER ใหม่/ไม่ถูกต้องและไม่เกี่ยวข้อง workdir เริ่มต้นของคอนเทนเนอร์ใหม่จะเหมือนกับ workdir เริ่มต้นของรูปภาพ ยกตัวอย่างเช่นฉันวิ่งdocker exec -ti <my_app> /bin/bash;แล้วในขั้นตอนการทุบตีใหม่และผมเห็นว่าไดเรกทอรีการทำงานคือpwd /app
lmat - คืนสถานะ Monica
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.