Score:8

การอัปเกรดนักเทียบท่าล้มเหลว: ไม่รองรับไดรเวอร์หน่วยเก็บข้อมูล aufs อีกต่อไป

ฉันมีเครื่อง Ubuntu ที่ติดตั้ง Docker(เวอร์ชัน Ubuntu คือ 20.04 แต่สิ่งนี้มีผลกับ 18.04 และเวอร์ชันที่ไม่ใช่ LTS ด้วยเช่นกัน) การอัปเกรดของ docker.io แพ็คเกจเป็นเวอร์ชันปัจจุบันจาก โฟกัสความปลอดภัย ล้มเหลว:

กำลังเตรียมแกะ .../docker.io_20.10.7-0ubuntu1~20.04.1_amd64.deb ...
ไม่รองรับไดรเวอร์หน่วยเก็บข้อมูล aufs อีกต่อไป
โปรดตรวจสอบว่าไม่มีคอนเทนเนอร์ใดของคุณ
ใช้ไดรเวอร์หน่วยเก็บข้อมูล aufs ลบไดเร็กทอรี
/var/lib/docker/aufs แล้วลองอีกครั้ง
dpkg: ข้อผิดพลาดในการประมวลผลไฟล์เก็บถาวร /var/cache/apt/archives/docker.io_20.10.7-0ubuntu1~20.04.1_amd64.deb (--unpack):
 กระบวนการย่อยของสคริปต์การติดตั้งล่วงหน้าของแพ็คเกจ docker.io ใหม่ส่งคืนสถานะการออกจากข้อผิดพลาด 1
dpkg: ข้อผิดพลาดขณะทำความสะอาด:
 แพ็คเกจ docker.io ที่ติดตั้งแล้วกระบวนการย่อยของสคริปต์หลังการติดตั้งส่งคืนสถานะการออกจากข้อผิดพลาด 1

มันคือ ข้อบกพร่องที่รู้จักแต่จุดบกพร่องนั้นถูกทำเครื่องหมายว่า 'ไม่สามารถแก้ไขได้' ตาม นโยบายบรรจุภัณฑ์ของ Ubuntu Docker.

การอ้างอิงหลาย ๆ คนที่นี่:

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

การอัปเกรดที่ต้องใช้การแทรกแซงด้วยตนเองมากเช่นนี้ไม่ควรเกิดขึ้นในรุ่น LTS

คุณถูกต้องเกี่ยวกับเรื่องนี้ในกรณีทั่วไป น่าเสียดายที่นักเทียบท่าเป็นข้อยกเว้น (â¦)

ดังนั้น เพื่อเป็นข้อยกเว้นสำหรับ Docker เราจึงอัปเดตเป็นอัปสตรีมรีลีสที่ใหม่กว่าโดยไม่ต้องกังวลเกี่ยวกับความเข้ากันได้แบบย้อนหลังของพฤติกรรมของ Docker เอง แทนที่จะพึ่งพาการตัดสินใจของอัพสตรีมทั้งหมด ในกรณีนี้และจากการวิเคราะห์ที่นำเสนอโดยผู้อื่นในที่นี้เท่านั้น หมายความว่าเราไม่คาดว่าจะแพตช์ไดรเวอร์หน่วยเก็บข้อมูล aufs กลับเข้าไปในบรรจุภัณฑ์ของเรา (â¦)

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

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

คำถามของฉันที่นี่คือฉันจะทำอย่างไรต่อไป ฉันจะแน่ใจได้อย่างไรว่าไม่มีคอนเทนเนอร์ [ของฉัน] ที่ใช้ไดรเวอร์พื้นที่เก็บข้อมูล aufs การเก็บ Docker เวอร์ชันเก่าที่ไม่ได้รับการบำรุงรักษานั้นเป็นสิ่งที่ไม่ต้องเริ่มต้น ฉันต้องมีการอัปเดตความปลอดภัย

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

Artur Meinild avatar
vn flag
วิธีการติดตั้ง Docker จาก [repos อย่างเป็นทางการ] (https://docs.docker.com/engine/install/ubuntu/) แทนเวอร์ชัน Canonicals (docker.io) ฉันกำลังทำสิ่งนี้และใช้เวอร์ชันล่าสุดโดยไม่มีปัญหา
Gilles 'SO- stop being evil' avatar
@ArturMeinild ปัญหาไม่ได้ใช้งานเวอร์ชันล่าสุด กำลังอัปเกรดเวอร์ชันที่ฉันมี
Artur Meinild avatar
vn flag
เนื้อหาของ `/var/lib/docker/aufs` คืออะไร?
Gilles 'SO- stop being evil' avatar
@ArturMeinild `diff` ที่มีไดเร็กทอรีที่มีชื่อเป็นเลขฐานสิบหก 64 หลัก (บางอันมี `-init` ต่อท้าย) และเท่าที่ฉันสามารถบอกได้ว่าเนื้อหาของไฟล์ถูกแก้ไขจากอิมเมจพื้นฐาน `เลเยอร์` ที่มีไฟล์ที่มีชื่อคล้ายกันซึ่งมีเนื้อหาเป็นไฟล์ข้อความที่มีเลขฐานสิบหก 64 หลักต่อบรรทัด `mnt` กับไดเร็กทอรีว่าง
Gilles 'SO- stop being evil' avatar
@ArturMeinild หน้านี้ไม่เป็นประโยชน์กับฉันเลย มันอธิบายวิธีการทำงานของไดรเวอร์สตอเรจ แต่ฉันไม่สนใจเรื่องนั้น ฉันต้องอัปเกรดระบบ _existing_ ของฉัน ฉันมีคอนเทนเนอร์ที่กำลังใช้ aufs ฉันจะย้ายไปยังโอเวอร์เลย์ได้อย่างไร
BjornW avatar
cn flag
ตอนนี้ก็โดนเหมือนกันครับ คุณสามารถถือ docker.io ไว้ที่เวอร์ชันเก่าได้หรือไม่? ฉันมีเวิร์กสเตชันที่มีคอนเทนเนอร์จำนวนมากซึ่งไม่ใช่เรื่องเล็กน้อยที่จะสร้างใหม่และไม่สามารถเสียเวลาทำมันได้เนื่องจากการอัปเกรด LTS (!)... :/
Gilles 'SO- stop being evil' avatar
@BjornW ใช่คุณสามารถเก็บแพ็คเกจนักเทียบท่าได้ แต่นั่นหมายความว่าคุณกำลังเผชิญกับช่องโหว่ด้านความปลอดภัยที่อาจพบได้ในเวอร์ชันนั้น
BjornW avatar
cn flag
ใช่จัดการเพื่อระงับตอนนี้และอัปเกรดแพ็คเกจอื่นให้เสร็จ .. บางครั้งความเป็นจริงรบกวนและบังคับให้คุณเลื่อนการอัปเกรดที่รุนแรงเช่นนี้ (อย่างน้อย IMO ไม่ควรถูกบังคับกับผู้คนตั้งแต่แรกโดยไม่มีเครื่องมือการย้าย ซึ่งเห็นได้ชัดว่า น่าจะทำได้เพราะคนอื่นโพสต์สคริปต์ที่สามารถย้ายคอนเทนเนอร์ได้) ขอบคุณสำหรับการตอบกลับและ btw ฉันไม่ได้ชี้นำการพูดจาโผงผางนี้ใส่คุณแน่นอน :)
Gilles 'SO- stop being evil' avatar
@BjornW หากคุณพบวิธีย้ายคอนเทนเนอร์โดยอัตโนมัติ โปรดโพสต์คำตอบที่นี่!
BjornW avatar
cn flag
@ Gilles'SO-stopbbingevil' ฉันสงสัยว่ามันใช้งานได้หรือไม่: https://stackoverflow.com/questions/44745304/how-to-move-images-of-docker-in-aufs-directory-to-overlay2 using docker save / โหลดนักเทียบท่า
Score:6
ธง vn

จาก เอกสาร Docker อย่างเป็นทางการ - วิธีกำหนดค่าไดรเวอร์การจัดเก็บข้อมูลของคุณเพื่อใช้งาน OverlayFS แทน อฟส.

  1. หยุดนักเทียบท่า

    sudo systemctl หยุดนักเทียบท่า
    
  2. คัดลอกเนื้อหาของ /var/lib/นักเทียบท่า ไปยังสถานที่ชั่วคราว

    cp -au /var/lib/docker /var/lib/docker.bk
    
  3. แก้ไข /etc/docker/daemon.json. หากยังไม่มีให้สร้างขึ้น สมมติว่าไฟล์ว่างเปล่า ให้เพิ่มเนื้อหาต่อไปนี้

    {
       "ไดรเวอร์สตอเรจ": "overlay2" 
    }
    

    นักเทียบท่าไม่เริ่มทำงานหากไฟล์ daemon.json มี JSON ที่มีรูปแบบไม่ถูกต้อง

  4. เริ่มนักเทียบท่า

    sudo systemctl เริ่มนักเทียบท่า
    
  5. ตรวจสอบว่า daemon กำลังใช้ไดรเวอร์หน่วยเก็บข้อมูล overlay2 ใช้คำสั่ง docker info แล้วมองหา Storage Driver และระบบไฟล์สำรอง

    ข้อมูลนักเทียบท่า $
    
    คอนเทนเนอร์: 0
    รูปภาพ: 0
    ไดร์เวอร์สตอเรจ: โอเวอร์เลย์2
     ระบบไฟล์สำรอง: xfs
     รองรับ d_type: จริง
     ส่วนต่างการซ้อนทับแบบเนทีฟ: จริง
    <...>
    

นักเทียบท่ากำลังใช้ไฟล์ โอเวอร์เลย์2 โปรแกรมควบคุมการจัดเก็บข้อมูล

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

หลังจากนี้ คุณสามารถลบไดเร็กทอรีได้ /var/lib/docker/aufs และดำเนินการอัพเกรดแพ็คเกจ Docker

Gilles 'SO- stop being evil' avatar
ฉันสับสนเกี่ยวกับ â จากนั้นคุณต้องสร้างคอนเทนเนอร์ใหม่และดึงรูปภาพทั้งหมดอีกครั้งด้วยไดรเวอร์พื้นที่เก็บข้อมูลใหม่ ข้อมูลคอนเทนเนอร์ที่แมปในไดรฟ์ข้อมูลไม่ควรถูกแก้ไขâ ฉันไม่รู้ว่า âข้อมูลคอนเทนเนอร์ที่แมปในวอลุ่มหมายความว่าอย่างไร อะไรถูกรักษาไว้ในขั้นตอนนี้? ฉันคิดว่ามันแปลกที่ฉันจะดาวน์โหลดอิมเมจพื้นฐานอีกครั้ง ซึ่งไม่ได้รับการแก้ไขโดยตัวเลือกของไดรเวอร์หน่วยเก็บข้อมูล แต่จะมีการปรับเปลี่ยนในเครื่อง แม้ว่านั่นจะเป็นสิ่งที่เกี่ยวกับไดรเวอร์หน่วยเก็บข้อมูลก็ตาม
Artur Meinild avatar
vn flag
ตอนนี้ฉันไม่รู้ว่าการตั้งค่า Docker ทั้งหมดของคุณเสร็จสมบูรณ์ แต่หวังว่าข้อมูลถาวรของคุณจะแยกออกจากข้อมูล Docker ข้อมูลรันไทม์ที่ใช้ไดรเวอร์หน่วยเก็บข้อมูลควร "เท่านั้น" เป็นข้อมูลชั่วคราว ทุกสิ่งที่คุณต้องการให้คงอยู่ควรถูกแมปที่อื่นเป็นไดรฟ์ข้อมูล (เส้นทางที่มีชื่อหรือเส้นทางตรง) ฉันสันนิษฐานเช่นนี้ เพราะหากไม่เป็นเช่นนั้น การย้ายคอนเทนเนอร์ของคุณจะเป็นเรื่องยากมาก
Artur Meinild avatar
vn flag
ให้คิดว่านี่คือการสร้างคอนเทนเนอร์ทั้งหมดของคุณตั้งแต่เริ่มต้น แต่ด้วยข้อมูลที่คงอยู่
in flag
ไดรเวอร์ aufs ถูกลบออกจากการอัปเกรด LTS docker.io ทั้งหมดหรือไม่ .. หรือฉันสามารถตั้งค่าแบ็กเอนด์ที่เก็บข้อมูลเป็น "overlay2" และอัปเกรดและเปลี่ยนกลับได้หรือไม่
in flag
ฉันได้ดูคู่มือการสำรอง/กู้คืนอิมเมจหลายรายการและคู่มือการสำรอง/กู้คืนคอนเทนเนอร์แล้ว และไม่มีใครอธิบายวิธีคืนค่าคอนเทนเนอร์ของคุณเหมือนเดิม ดังนั้นคุณจึงสามารถดำเนินการต่อจากจุดที่คุณค้างไว้ได้..
Mave avatar
id flag
@Brunis คุณเคยพบคำตอบหรือไม่? ฉันเพิ่งสูญเสียอิมเมจและคอนเทนเนอร์ทั้งหมดไป :|
in flag
@Mave ฉันย้ายข้อมูลทุกอย่างเพื่อเขียนนักเทียบท่าฉันใช้เวลาหลายวันกว่าที่ฉันจะสร้างคอนเทนเนอร์ใหม่ได้ และอิมเมจ pgsql ถูกแมปอย่างถูกต้องกับระบบไฟล์ที่ไฟล์ db ของฉันอยู่ ช่างเป็นฝันร้าย ไม่รอ LTS ออกอีกแล้ว เรื่องตลกที่ไม่มีเส้นทางอัพเกรดจาก LTS -> LTS ..
Score:0
ธง in

โปรดทราบว่า หากคุณควรย้ายไดเร็กทอรีข้อมูลไปยังตำแหน่งอื่น (เช่น ผ่าน "ข้อมูลราก"ตัวเลือกใน daemon.json) คุณต้องลบไดเร็กทอรี aufs ทั้งสองไดเร็กทอรีภายใต้ไดเร็กทอรีใหม่ ข้อมูลราก และอันที่อยู่ด้านล่าง /var/lib/นักเทียบท่า ก่อนดำเนินการติดตั้งแพ็คเกจ

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา