Docker for Mac volume mount ทำงานแตกต่างจากระบบ Docker ฐาน ส่วนใหญ่เป็นเพราะ Docker พยายามปฏิบัติตามแนวทางแซนด์บ็อกซ์ระบบไฟล์ของ Apple
ตามที่แสดงในการตั้งค่าของนักเทียบท่า macOS จะส่งออกเฉพาะบางเส้นทางเท่านั้น
/Users
/Volumes
/tmp
/private
/var
ใน MacOS /private
การเชื่อมโยงสัญลักษณ์ลงใน นอกจากนี้ยังเป็นจริงสำหรับ/tmp
:
$ ls -ld /tmp /var
lrwxr-xr-x@ 1 root wheel 11 Jan 26 16:18 /tmp -> private/tmp
lrwxr-xr-x@ 1 root wheel 11 Jan 26 16:18 /var -> private/var
เหตุใดจึง/tmp
ปรากฏในแผงการแบ่งปัน แต่/var
ไม่มี (แม้ว่าทั้งสองจะเป็นส่วนหนึ่งของ/private
) เอกสารของ Docker for Mac เกี่ยวกับเนมสเปซระบบไฟล์อธิบาย:
โดยค่าเริ่มต้นคุณสามารถแบ่งปันไฟล์ใน/Users/
, /Volumes/
, /private/
และ/tmp
โดยตรง ในการเพิ่มหรือลบไดเร็กทอรีทรีที่ส่งออกไปยัง Docker ให้ใช้แท็บการแชร์ไฟล์ในเมนูปลาวาฬการตั้งค่า Docker -> การตั้งค่า -> การแชร์ไฟล์ (ดูค่ากำหนด)
เส้นทางอื่น ๆ ทั้งหมดที่ใช้ใน -v
เชื่อมโยงการเชื่อมโยงมีที่มาจาก Moby Linux VM ที่รันคอนเทนเนอร์ Dockerดังนั้นอาร์กิวเมนต์เช่น-v /var/run/docker.sock:/var/run/docker.sock
ควรทำงานได้ตามที่คาดไว้ หากไม่ได้แชร์พา ธ macOS และไม่มีอยู่ใน VM ความพยายามในการเชื่อมโยงเมาท์จะล้มเหลวแทนที่จะสร้างขึ้นใน VM เส้นทางที่มีอยู่แล้วใน VM และมีไฟล์จะถูกสงวนไว้โดย Docker และไม่สามารถส่งออกจาก macOS ได้
โปรดทราบว่า/var/run
มีการกล่าวถึงโดยเฉพาะที่นี่ว่าเป็นสถานที่ที่จะติดตั้งจาก Linux VM แทนที่จะเป็นจาก macOS
เมื่อคุณขอการเมานต์โวลุ่มระบบไฟล์ macOS จะถูกตรวจสอบก่อน หากไม่มีข้อมูลตรงกันระบบจะตรวจสอบ Linux VM ที่ Docker กำลังทำงานอยู่ถัดไป หากไม่มีเส้นทางที่คุณร้องขอแสดงว่าการเมานต์ล้มเหลว
ในกรณีของคุณ /var
macOS จะไม่ส่งออก /var
มีอยู่ใน Linux VM แต่/var/folders
ไม่มี ดังนั้นเส้นทางจึงไม่พร้อมใช้งานและการเมาท์ล้มเหลว
หากคุณเปลี่ยนเส้นทางเป็น /private/var
ก็จะสำเร็จเนื่องจาก macOS ส่งออก/private
โครงสร้างระบบไฟล์ทั้งหมดสำหรับการติดตั้ง
เพื่อที่จะทำให้สิ่งที่พกพามากขึ้นคุณอาจต้องการที่จะทดสอบแพลตฟอร์มที่คุณกำลังทำงานอยู่ในขณะนี้และถ้ามัน MacOS /private
ของคำนำหน้าเส้นทางที่ติดกับ
-v /private/var/folders/zz/...
หรือยัง?