Docker และ --userns-remap วิธีจัดการสิทธิ์ระดับเสียงเพื่อแชร์ข้อมูลระหว่างโฮสต์และคอนเทนเนอร์
ในนักเทียบท่าไฟล์ที่สร้างขึ้นภายในคอนเทนเนอร์มักจะมีความเป็นเจ้าของที่ไม่สามารถคาดเดาได้ในขณะที่ตรวจสอบไฟล์เหล่านั้นจากโฮสต์ เจ้าของไฟล์บนไดรฟ์ข้อมูลคือ root (uid 0) โดยค่าเริ่มต้น แต่ทันทีที่บัญชีผู้ใช้ที่ไม่ใช่รูทเกี่ยวข้องกับคอนเทนเนอร์และเขียนไปยังระบบไฟล์เจ้าของจะสุ่มจากมุมมองของโฮสต์มากขึ้นหรือน้อยลง เป็นปัญหาเมื่อคุณต้องการเข้าถึงข้อมูลปริมาณจากโฮสต์โดยใช้บัญชีผู้ใช้เดียวกันซึ่งเรียกใช้คำสั่งนักเทียบท่า วิธีแก้ปัญหาทั่วไปคือ บังคับให้ผู้ใช้ uIDs ในเวลาสร้างใน Dockerfiles (ไม่ใช่แบบพกพา) ส่งผ่าน UID ของผู้ใช้โฮสต์ไปยังdocker runคำสั่งเป็นตัวแปรสภาพแวดล้อมจากนั้นรันchownคำสั่งบางคำบนไดรฟ์ข้อมูลในสคริปต์จุดเริ่มต้น โซลูชันทั้งสองนี้สามารถควบคุมสิทธิ์จริงภายนอกคอนเทนเนอร์ได้ ฉันคาดว่าเนมสเปซของผู้ใช้จะเป็นทางออกสุดท้ายสำหรับปัญหานี้ ฉันได้ทำการทดสอบกับเวอร์ชัน 1.10 ที่เพิ่งเปิดตัวและ - ผู้ใช้ - ทำการรีแมปไปยังบัญชีเดสก์ท็อปของฉัน อย่างไรก็ตามฉันไม่แน่ใจว่ามันสามารถทำให้การเป็นเจ้าของไฟล์บนไดรฟ์ข้อมูลที่เมาท์จัดการง่ายขึ้นฉันกลัวว่ามันอาจจะตรงกันข้าม สมมติว่าฉันเริ่มคอนเทนเนอร์พื้นฐานนี้ docker run -ti -v /data debian:jessie /bin/bash echo 'hello' > /data/test.txt exit จากนั้นตรวจสอบเนื้อหาจากโฮสต์: ls -lh /var/lib/docker/100000.100000/volumes/<some-id>/_data/ -rw-r--r-- 1 100000 100000 6 …