ประวัติความเป็นมาของปัญหาการโยกย้ายที่เก็บข้อมูลนักเทียบท่า (รูทนักเทียบท่า)

เมื่อสองสามวันที่ผ่านมา มีการตัดสินใจในเซิร์ฟเวอร์ตัวใดตัวหนึ่งให้ย้ายที่เก็บข้อมูลนักเทียบท่า (ไดเร็กทอรีที่นักเทียบท่าเก็บไฟล์คอนเทนเนอร์และไฟล์รูปภาพทั้งหมด) ไปยังส่วนที่แยกต่างหาก ซึ่ง
มีความจุมากขึ้น งานดูเหมือนเล็กน้อยและไม่ได้บอกปัญหาล่วงหน้า...

มาเริ่มกันเลย:

1. หยุดและฆ่าคอนเทนเนอร์ทั้งหมดของแอปพลิเคชันของเรา:

docker-compose down

หากมีภาชนะจำนวนมากและมีองค์ประกอบต่างกัน คุณสามารถทำได้:

docker rm -f $(docker ps -q)

2. หยุดนักเทียบท่าดีมอน:

systemctl stop docker

3. ย้ายไดเร็กทอรีไปยังตำแหน่งที่ต้องการ:

cp -r /var/lib/docker /docker/data/storage

4. เราบอกให้ docker daemon ค้นหาในไดเร็กทอรีใหม่ มีหลายตัวเลือก: ใช้แฟล็ก -g เพื่อชี้ daemon ไปยังเส้นทางใหม่ หรือใช้การกำหนดค่า systemd ซึ่งเราใช้ หรือซิมลิงค์ ฉันจะไม่ลงรายละเอียดมากเกินไปเกี่ยวกับเรื่องนี้ มันอยู่บนอินเทอร์เน็ต เต็มแล้ว คู่มือการย้าย docker root ไปยังตำแหน่งใหม่

5. เริ่ม docker daemon และตรวจสอบให้แน่ใจว่าอยู่ในตำแหน่งที่ถูกต้อง:

systemctl status docker

ในบรรทัดเอาต์พุตบรรทัดใดบรรทัดหนึ่งเราควรเห็น:

├─19493 /usr/bin/dockerd --data-root=/docker/data/storage

เราทำให้แน่ใจว่าตัวเลือกนั้นถูกส่งไปที่ daemon แล้ว ตอนนี้เรามาตรวจสอบว่ามันใช้งานได้หรือไม่ (ขอบคุณ inkvizitor68sl)!

docker info | awk '/Root Dir/ {print $NF}' 

6. มาเริ่มแอปพลิเคชันของเรากัน:

docker-compose up -d

7. ตรวจสอบ

และความสนุกก็เริ่มต้นขึ้น DBMS, MQ ทุกอย่างเรียบร้อยดี! ฐานข้อมูลไม่เสียหาย ทุกอย่างทำงานได้... ยกเว้น nginx เรามี nginx build ของเราเองพร้อมกับ Kerberos และโสเภณี และการดูบันทึกของคอนเทนเนอร์ระบุว่าไม่สามารถเขียนไปที่ /var/tmp - Permission ถูกปฏิเสธ ฉันนวดขมับด้วยมือแล้วพยายามวิเคราะห์สถานการณ์... เป็นไปได้อย่างไร? รูปภาพนักเทียบท่าไม่เปลี่ยนแปลง เราเพิ่งย้ายไดเร็กทอรี มันได้ผลเสมอและนี่คือเพื่อคุณ... เพื่อประโยชน์ในการทดลองฉันเข้าไปในคอนเทนเนอร์ด้วยมือของฉันและเปลี่ยนสิทธิ์ในไดเร็กทอรีนี้มีอยู่ รูท, รูท 755, ให้ รูท, รูท 777. และทุกอย่างเริ่มต้นขึ้น... ความคิดเริ่มดังขึ้นในหัวของฉัน - เรื่องไร้สาระบางอย่าง... ฉันคิดว่าบางทีฉันอาจจะไม่ได้คำนึงถึงบางสิ่งบางอย่าง...

ฉันตัดสินใจว่าเราหลงรักสิทธิ์การเข้าถึงไฟล์ระหว่างการถ่ายโอน เราหยุดแอปพลิเคชัน docker daemon ลบไดเร็กทอรีใหม่และคัดลอกไดเร็กทอรี /var/lib/docker โดยใช้ rsync -a.

ฉันคิดว่าทุกอย่างเรียบร้อยดีแล้ว มายกระดับแอปพลิเคชัน Docker กันดีกว่า

อ่า... ปัญหายังคงอยู่... ตาของฉันกระตุก ฉันรีบไปที่คอนโซลของเครื่องเสมือนของฉัน ซึ่งฉันทำการทดสอบต่างๆ ฉันมีอิมเมจ nginx นี้ และฉันก็ปีนเข้าไปในคอนเทนเนอร์ และนี่คือสิทธิ์ในไดเร็กทอรี /var/tmp คือ root, root 777 นั่นคือ เช่นเดียวกับที่ฉันต้องตั้งค่าด้วยตนเอง แต่ภาพเหมือนกัน!

ระบบไฟล์ xfs ถูกใช้ทุกที่

ฉันเปรียบเทียบโดยใช้คำสั่ง

docker inspect my-nginx:12345

แฮชทั้งหมดเหมือนกันทั้งหมดแบบหนึ่งต่อหนึ่ง ทั้งบนเซิร์ฟเวอร์และบนเครื่องเสมือนของฉัน ฉันลบอิมเมจ nginx ในเครื่องแล้วดึงมันอีกครั้งจากรีจิสตรี ซึ่งด้วยเหตุผลหลายประการจึงอยู่ในเครื่องเดียวกัน แล้วปัญหาก็เหมือนเดิม...ตอนนี้ตาอีกข้างกระตุกแล้ว

ฉันจำไม่ได้อีกแล้วว่าคิดอะไรอยู่ในหัว นอกจากตะโกนว่า “อ๊ายยยยย” และอื่นๆ อีกมากมาย เป็นเวลาตี 4 และใช้ซอร์สโค้ด Docker เพื่อทำความเข้าใจหลักการของการแฮชเลเยอร์รูปภาพ เปิดเครื่องดื่มชูกำลังกระป๋องที่สาม และในท้ายที่สุดฉันก็เข้าใจได้ว่าการแฮชจะคำนึงถึงไฟล์และเนื้อหาของมันเท่านั้น ไม่ใช่สิทธิ์การเข้าถึง! นั่นคือสิทธิ์ของเราสูญเสียไปในทางลึกลับ selinux ถูกปิดใช้งาน ไม่ได้ใช้ acl และไม่มีบิตเหนียว

ฉันลบอิมเมจในเครื่องแล้ว ลบอิมเมจออกจากรีจิสทรีนักเทียบท่าด้วยแล้วดันอีกครั้ง และทุกอย่างได้ผล ปรากฎว่าในระหว่างการถ่ายโอนสิทธิ์หายไปทั้งภายในรูปภาพในเครื่องและภายในรูปภาพที่อยู่ในรีจิสทรี อย่างที่ฉันบอกไปแล้วด้วยเหตุผลหลายประการว่าทำไมมันถึงอยู่บนรถคันเดียวกัน และเป็นผลให้อยู่ในไดเร็กทอรีเดียว /var/lib/docker

และคาดการณ์คำถามว่าพวกเขาพยายามที่จะคืนสายตาของนักเทียบท่าไปยังไดเร็กทอรีเก่าหรือไม่ - ไม่พวกเขาไม่ได้ลอง แต่อนิจจาสถานการณ์ไม่เอื้ออำนวย ใช่ และฉันอยากจะคิดออกจริงๆ

หลังจากเขียนบทความนี้ ดูเหมือนว่าวิธีแก้ปัญหาจะชัดเจนสำหรับฉัน แต่ในขณะที่วิเคราะห์ดูเหมือนจะไม่เป็นเช่นนั้น จริงๆ แล้วฉัน Googled และไม่พบสถานการณ์ที่คล้ายกัน

ผลลัพธ์: ฉันแก้ไขปัญหาแล้ว แต่ยังไม่เข้าใจเหตุผล =(

หากใครรู้เดามีวิสัยทัศน์เกี่ยวกับสาเหตุที่เป็นไปได้ของปัญหานี้ฉันยินดีอย่างยิ่งที่ได้รับฟังจากคุณในความคิดเห็น!

ที่มา: will.com

เพิ่มความคิดเห็น