Docker build ให้“ ไม่สามารถเตรียมบริบทได้: บริบทต้องเป็นไดเร็กทอรี: / Users / tempUser / git / docker / Dockerfile”


93

ฉันมีสิ่งDockerfileที่ควรจะสร้างUbuntuภาพ แต่เมื่อใดที่ฉันวิ่ง

docker build -t ubuntu-test:latest ./Dockerfile

แสดงข้อผิดพลาดต่อไปนี้บนคอนโซล

ไม่สามารถเตรียมบริบท: บริบทต้องเป็นไดเร็กทอรี: / Users / tempUser / git / docker / Dockerfile

ฉันใช้ Mac OsX ฉันพยายามแล้วsudoเช่นกัน ไม่มีอะไรทำงาน

คำตอบ:


142

คุณต้องชี้ไปที่ไดเร็กทอรีแทน คุณต้องไม่ระบุ dockerfile

docker build -t ubuntu-test:latest .ไม่ทำงาน

docker build -t ubuntu-test:latest ./Dockerfileไม่ได้ทำงาน


ทำไมถึงเป็นแบบนี้? ดูเหมือนแปลกที่ต้องชี้ไปที่ผบ. เมื่อคุณสามารถชี้ไปที่ไฟล์ได้อย่างง่ายดาย
Monica Heddneck

72

คุณยังสามารถรันนักเทียบท่าได้ด้วย-fตัวเลือก

docker build -t ubuntu-test:latest -f Dockerfile.custom .


1
สิ่งนี้ได้ผลสำหรับฉัน ชื่อ Dockerfile ในกรณีของฉันคือDockerfile-abcdดังนั้นฉันจึงต้องเริ่มการทำงาน:docker build -t my-custom-name -f /path_to_my_docker_file/Dockerfile-abcd .
niranjan harpale

17

ในการระบุDockerfileเวลาสร้างคุณสามารถใช้:

docker build -t ubuntu-test:latest - < /path/to/your/Dockerfile

แต่จะล้มเหลวหากมีADDหรือCOPYคำสั่งที่ขึ้นอยู่กับเส้นทางสัมพัทธ์ มีหลายวิธีในการระบุ a contextfor docker buildคุณสามารถอ้างถึงdocs of docker buildสำหรับข้อมูลเพิ่มเติม


ทำสิ่งนี้สำหรับubuntu 12.04 : docker build -t ubuntu:12.04 - < Dockerfileคุณต้องอยู่ในรูทของDockerfile
Dominic Motuka

15

เข้าใจบริบท

docker buildคำสั่ง

ไวยากรณ์พื้นฐานของคำสั่ง build ของนักเทียบท่าคือ

docker build -t imagename:imagetag context_dir

บริบท

บริบทเป็นไดเร็กทอรีและกำหนดว่ากระบวนการสร้างนักเทียบท่าจะเห็นอะไร: จากมุมมองของ Dockerfile ไฟล์ใด ๆcontext_dir/mydir/myfileในระบบไฟล์ของคุณจะกลายเป็น/mydir/myfileDockerfile และด้วยเหตุนี้ในระหว่างกระบวนการสร้าง

Dockerfile

หาก dockerfile ถูกเรียกDockerfileและอยู่ในบริบทจะพบโดยปริยายโดยหลักการตั้งชื่อ นั่นเป็นเรื่องดีเพราะหมายความว่าคุณสามารถค้นหา Dockerfile ในคอนเทนเนอร์นักเทียบท่าได้ทันที

หากคุณยืนยันที่จะใช้ชื่ออื่นให้พูดว่า "/ tmp / mydockerfile" คุณสามารถใช้-fดังนี้:

docker build -t imagename:imagetag -f /tmp/mydockerfile context_dir

แต่ dockerfile จะไม่อยู่ในโฟลเดอร์เดียวกันหรืออย่างน้อยก็หายากขึ้น


2

มันง่ายมากเมื่อใดก็ตามที่มีการเรียกใช้งาน Docker นักเทียบท่าอยากรู้ว่าชื่อภาพคืออะไรดังนั้นเราจึงต้องผ่าน -t: ตอนนี้ตรวจสอบให้แน่ใจว่าคุณอยู่ในไดเร็กทอรีเดียวกับที่คุณมี Dockerfile และเรียกใช้

docker build -t <image_name>:<version> . ตัวอย่าง docker build -t my_apache:latest .สมมติว่าคุณอยู่ในไดเร็กทอรีเดียวกับ Dockerfile ของคุณมิฉะนั้นจะผ่านแฟล็ก -f และ Dockerfile

docker build -t my_apache:latest -f ~/Users/documents/myapache/Dockerfile


เพื่อให้คำสั่งที่สองทำงานให้ฉันฉันต้องเปลี่ยนเล็กน้อย: docker build -t my_apache:latest -f ~/Users/documents/myapache/Dockerfile(สังเกตการเพิ่มของ a .ในตอนท้าย)
Josh

2

ฉันประสบปัญหาเดียวกัน ฉันใช้docker version:17.09.0-ce.

ฉันทำตามขั้นตอนด้านล่าง:

  1. สร้าง Dockerfile และเพิ่มคำสั่งสำหรับสร้าง Docker Image
  2. ไปที่ไดเร็กทอรีที่เราสร้าง Dockfile
  3. ดำเนินการคำสั่งด้านล่าง $ sudo docker build -t ubuntu-test:latest .

แก้ไขปัญหาและสร้างภาพได้สำเร็จ

หมายเหตุ: คำสั่ง build ขึ้นอยู่กับเวอร์ชันของนักเทียบท่าและตัวเลือกการสร้างที่เราใช้ :)


1

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

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