เราสามารถใช้WORKDIR
ตั้งไดเร็กทอรีเป็น work directory ได้Dockerfile
แต่ถ้าเราไม่ตั้งค่า default จะเป็นเท่าไร?
เราสามารถใช้WORKDIR
ตั้งไดเร็กทอรีเป็น work directory ได้Dockerfile
แต่ถ้าเราไม่ตั้งค่า default จะเป็นเท่าไร?
คำตอบ:
บอกว่าเป็น/
ดังนั้นไดเรกทอรีราก
ค่าเริ่มต้นเป็นไป/
ตามที่ระบุไว้ที่อื่น เป็นเรื่องที่ควรค่าแก่การกล่าวถึงว่าคุณแทบจะไม่ได้ใช้งานจากอิมเมจนักเทียบท่าที่ว่างเปล่า ( 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
อย่างชัดเจน
ไดเร็กทอรีการทำงานเริ่มต้นสำหรับการรันไบนารีภายในคอนเทนเนอร์คือไดเร็กทอรีราก ( /
) แต่ผู้พัฒนาสามารถตั้งค่าไดเร็กทอรีอื่นด้วยคำสั่ง Dockerfile WORKDIR ตัวดำเนินการสามารถแทนที่สิ่งนี้ด้วย:
-w="": Working directory inside the container
ที่นี่: https://docs.docker.com/engine/reference/run/#workdir
เนื่องจากไม่มีผู้ใช้ แต่รูทในนักเทียบท่าที่เพิ่งเกิดหรือคอนเทนเนอร์พูดอย่างเคร่งครัด ดังนั้นสำหรับการเปลี่ยนแปลงทุกครั้งจะมีการกระทำสำหรับคอนเทนเนอร์นั้นตามที่ผู้ชายคนนี้พูด ดังนั้น pwd ของสิ่งนั้นหรือตามที่คุณถาม WORKDIR จึงเป็น/
รูทโดยค่าเริ่มต้นและทุกครั้งที่คุณดำเนินการ/bin/bash
ดังนี้:
$docker exec -i -t 53f784fwer54 /bin/bash
บนคอนเทนเนอร์ที่กำลังทำงานอยู่มันจะทำให้คุณอยู่ที่นี่/
ในรูท dir
/
ไม่ถูกต้องและไม่เกี่ยวข้อง workdir เริ่มต้นของคอนเทนเนอร์ใหม่จะเหมือนกับ workdir เริ่มต้นของรูปภาพ ยกตัวอย่างเช่นฉันวิ่งdocker exec -ti <my_app> /bin/bash;
แล้วในขั้นตอนการทุบตีใหม่และผมเห็นว่าไดเรกทอรีการทำงานคือpwd
/app
RUN pwd