TL;ดร
ปัญหารากคือจุดบกพร่องในอิมเมจพื้นฐานที่คุณใช้ การแก้ไขอย่างถาวรคือการล้างออก /var/lib/apt/lists
ในอิมเมจฐาน Dockerfile แต่สามารถแก้ไขได้ชั่วคราวโดยสร้างอิมเมจพื้นฐานใหม่หรือใช้ไฟล์ --allow-releaseinfo-change
ตัวเลือก.
สาเหตุที่พฤติกรรมนี้แตกต่างกันระหว่าง สร้างนักเทียบท่า
และ เรียกใช้นักเทียบท่า - มัน
คือการใช้ -t
ตั้งค่าสถานะเพื่อจัดสรร tty สิ่งนี้จะเปลี่ยนพฤติกรรมของ ฉลาด -y
(APT::Get::สมมติ-ใช่
).
คำอธิบายแบบเต็ม
Repository ... เปลี่ยนค่า 'Suite' แล้ว
ข้อผิดพลาดนี้เกิดขึ้นเมื่อ:
- APT มีไฟล์รีลีสเวอร์ชันแคช -- นี่คือจุดบกพร่อง อิมเมจฐานนักเทียบท่าโดยทั่วไปควรล้างแคชนี้
- repo ระยะไกลมีเวอร์ชันที่ใหม่กว่า
- บางฟิลด์ไม่ตรงกันระหว่างสองเวอร์ชัน
ในสภาพแวดล้อมที่ไม่ใช่นักเทียบท่า การตรวจสอบนี้มีวัตถุประสงค์ เพื่อปกป้องผู้ใช้จากการติดตั้งแพ็คเกจจาก Debian รุ่นอื่นอย่างกะทันหันและโดยไม่คาดคิด
ในกรณีนี้คือรูปฐาน mcr.microsoft.com/azure-functions/python:3.0-python3.9
ประกอบด้วย ที่มีอยู่ เวอร์ชันแคชของไฟล์ Debian buster Release (เงื่อนไข #1) กับ ห้องชุด: มีเสถียรภาพ
เพราะเป็นปัจจุบันในขณะที่สร้าง
อย่างไรก็ตามสำเนาหลักใน ไฟล์เก็บถาวร Debian นั้นใหม่กว่า (เงื่อนไข #2) และตอนนี้มี ห้องชุด: oldstable
(เงื่อนไข #3) เนื่องจาก Debian 10 บัสเตอร์ได้รับ แทนที่ โดย Debian 11 เป้า
ดังนั้นเมื่อคุณพยายามที่จะวิ่ง การปรับปรุงที่เหมาะสม
ในรูปฐานนี้ มันล้มเหลวเนื่องจากการ ไม่ตรงกัน ระหว่างแคชเวอร์ชันเก่ากับเวอร์ชันปัจจุบัน
ฉันลองใช้ Dockerfile ของคุณแล้ว (2021-09-03) และมันก็ใช้ได้ดีสำหรับฉัน อาจเป็นเพราะมันถูกสร้างใหม่ตั้งแต่ที่คุณโพสต์คำถามนี้ ซึ่งจะทำให้แคชไฟล์ Release ใหม่จากไฟล์เก็บถาวร Debian แก้ไขค่าที่ไม่ตรงกัน (#2/#3 ด้านบนไม่เป็นความจริงอีกต่อไป)
อย่างไรก็ตาม คุณสามารถตรวจสอบได้ว่าข้อบกพร่องยังคงอยู่:
$ docker run --rm -it --entrypoint bash mcr.microsoft.com/azure-functions/python:3.0-python3.9
root@722ec78233b4:/# grep Suite /var/lib/apt/lists/*Release
/var/lib/apt/lists/deb.debian.org_debian_dists_buster-updates_InRelease:Suite: oldstable-updates
/var/lib/apt/lists/deb.debian.org_debian_dists_buster_InRelease:ชุด: oldstable
/var/lib/apt/lists/packages.microsoft.com_debian_9_prod_dists_stretch_InRelease:ชุด: ยืด
/var/lib/apt/lists/security.debian.org_debian-security_dists_buster_updates_InRelease:ชุด: oldstable
/var/lib/apt/lists/security.debian.org_debian-security_dists_jessie_updates_InRelease:ชุด: oldoldstable
และข้อผิดพลาดเดียวกันจะเกิดขึ้นอีกหลังจาก Debian รุ่นถัดไป เมื่อบัสเตอร์กลายเป็น เก่าเก่ามั่นคง
และเป้ากลายเป็น เก่าแก่
.
ฉันพบปัญหาที่คล้ายกันกับอิมเมจฐานนักเทียบท่าที่ไม่เกี่ยวข้องเมื่อเร็วๆ นี้ และฉันคิดว่าข้อบกพร่องนี้ค่อนข้างแพร่หลาย
พฤติกรรมของ -ย
ตัวเลือก
เมื่อคุณวิ่ง ฉลาด
ด้วย tty เป็น stdin -ย
จะลบล้างการตรวจสอบนี้และอนุญาตให้ อัปเดต
คำสั่งให้สำเร็จ อย่างไรก็ตาม หากไม่มี tty (เซสชันที่ไม่โต้ตอบ) แสดงว่า -ย
ตัวเลือก จะไม่ลบล้าง การตรวจสอบนี้ ฉันยืนยันสิ่งนี้โดยใช้รูปภาพบั๊กกี้เวอร์ชันเก่ากว่า:
#ยกเลิก
นักเทียบท่าเรียกใช้ --rm mcr.microsoft.com/azure-functions/python:3.0.15066-python3.9-slim apt update -y
#สำเร็จ
นักเทียบท่ารัน -t --rm mcr.microsoft.com/azure-functions/python:3.0.15066-python3.9-slim apt update -y
# แจ้งให้ y/N ดำเนินการต่อ
นักเทียบท่าเรียกใช้ -it --rm mcr.microsoft.com/azure-functions/python:3.0.15066-python3.9-slim apt update
#ยกเลิก
นักเทียบท่าเรียกใช้ --rm mcr.microsoft.com/azure-functions/python:3.0.15066-python3.9-slim apt update