TL;DR
Vấn đề gốc là một lỗi trong hình ảnh cơ sở mà bạn đang sử dụng. Cách khắc phục vĩnh viễn là xóa /var/lib/apt/danh sách
trong Dockerfile hình ảnh cơ sở, nhưng nó có thể được xử lý tạm thời bằng cách xây dựng lại hình ảnh cơ sở hoặc sử dụng --allow-releaseinfo-change
Tùy chọn.
Lý do tại sao hành vi này khác nhau giữa xây dựng docker
và docker chạy -it
là việc sử dụng -t
cờ để phân bổ một tty. Điều này làm thay đổi hành vi của apt -y
(APT::Nhận::Giả sử-Có
).
giải thích đầy đủ
Kho lưu trữ ... đã thay đổi giá trị 'Suite' của nó
Lỗi này xảy ra khi:
- APT có phiên bản được lưu trong bộ nhớ cache của tệp Phát hành -- Đây là lỗi. Hình ảnh cơ sở Docker nói chung nên làm sạch bộ đệm này.
- Repo từ xa có phiên bản mới hơn
- Một số trường không khớp giữa hai phiên bản
Trong một môi trường không docker, kiểm tra này là dự định để bảo vệ người dùng khỏi việc cài đặt đột ngột và bất ngờ các gói từ một bản phát hành Debian khác.
Trong trường hợp này, hình ảnh cơ sở mcr.microsoft.com/azure-functions/python:3.0-python3.9
chứa chứa các phiên bản được lưu trong bộ nhớ đệm của các tệp Phát hành Debian buster (điều kiện #1) với Bộ: ổn định
, bởi vì đó là hiện tại tại thời điểm nó được xây dựng.
Tuy nhiên, bản sao chính trong Kho lưu trữ Debian mới hơn (điều kiện #2), và bây giờ đã có Suite: oldstable
(điều kiện #3), vì Debian 10 buster đã được thay thế bởi Debian 11 bullseye.
Vì vậy, khi bạn cố gắng chạy cập nhật apt
trên hình ảnh cơ sở này, nó không thành công vì không phù hợp giữa phiên bản được lưu trong bộ nhớ cache cũ và phiên bản hiện tại.
Tôi đã thử Dockerfile của bạn ngay bây giờ (2021-09-03) và nó hoạt động tốt với tôi. Điều này có thể là do nó đã được xây dựng lại kể từ khi bạn đăng câu hỏi này. Điều này sẽ khiến nó lưu vào bộ nhớ đệm các tệp Phát hành mới từ kho lưu trữ Debian, sửa lỗi không khớp (#2/#3 ở trên không còn đúng nữa).
Tuy nhiên, bạn có thể xác minh rằng lỗi vẫn còn đó:
$ 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:Suite: oldstable
/var/lib/apt/lists/packages.microsoft.com_debian_9_prod_dists_stretch_InRelease:Suite: stretch
/var/lib/apt/lists/security.debian.org_debian-security_dists_buster_updates_InRelease:Suite: oldstable
/var/lib/apt/lists/security.debian.org_debian-security_dists_jessie_updates_InRelease:Suite: oldoldstable
Và lỗi tương tự sẽ lặp lại sau bản phát hành Debian tiếp theo, khi buster trở thành cũổn định
và mắt bò trở thành chuồng cũ
.
Gần đây, tôi đã gặp sự cố tương tự với hình ảnh cơ sở docker không liên quan và tôi nghĩ rằng lỗi này khá phổ biến.
hành vi của -y
Tùy chọn
Khi bạn chạy đúng cách
với một tty như stdin, -y
sẽ ghi đè kiểm tra này và cho phép cập nhật
lệnh thành công. Tuy nhiên, nếu không có tty (phiên không tương tác), -y
Tùy chọn sẽ không ghi đè lên kiểm tra này. Tôi đã xác nhận điều này bằng phiên bản cũ hơn của hình ảnh lỗi:
# phá thai
docker run --rm mcr.microsoft.com/azure-functions/python:3.0.15066-python3.9-slim apt update -y
# thành công
docker run -t --rm mcr.microsoft.com/azure-functions/python:3.0.15066-python3.9-slim apt update -y
# lời nhắc để y/N tiếp tục
docker run -it --rm mcr.microsoft.com/azure-functions/python:3.0.15066-python3.9-slim apt update
# phá thai
docker run --rm mcr.microsoft.com/azure-functions/python:3.0.15066-python3.9-slim apt update