TL;DR
Основная проблема — это ошибка в используемом вами базовом образе. Постоянное исправление состоит в том, чтобы очистить /var/lib/apt/списки
в базовом образе Dockerfile, но его можно временно обойти, перестроив базовый образ или используя --allow-releaseinfo-change
вариант.
Причина, по которой это поведение различается между сборка докера
и докер запустить -это
это использование -т
флаг для выделения tty. Это меняет поведение подходящий -y
(APT::Get::Предположим-Да
).
Полное объяснение
Репозиторий... изменил значение "Suite"
Эта ошибка возникает, когда:
- APT имеет кешированную версию файла Release — Это ошибка. Базовые образы Docker обычно должны очищать этот кеш.
- Удаленное репо имеет более новую версию
- Некоторые поля не совпадают между двумя версиями
В среде без докера эта проверка предназначена чтобы защитить пользователя от внезапной и неожиданной установки пакетов из другого выпуска Debian.
В этом случае базовое изображение mcr.microsoft.com/azure-functions/python:3.0-python3.9
содержит содержится кэшированные версии файлов Debian buster Release (условие №1) с Люкс: стабильный
, потому что это было актуально в то время, когда оно было построено.
Однако мастер-копия в Архив Debian новее (условие № 2), и теперь имеет Люкс: старая конюшня
(условие №3), потому что Debian 10 buster был заменен от 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:Suite: oldstable
/var/lib/apt/lists/packages.microsoft.com_debian_9_prod_dists_stretch_InRelease:Suite: растянуть
/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
И та же ошибка повторится после следующего выпуска Debian, когда buster станет старый стабильный
и яблочко становится старая конюшня
.
Недавно я видел похожую проблему с несвязанным базовым образом докера, и я думаю, что эта ошибка довольно широко распространена.
Поведение -у
вариант
Когда вы бежите подходящий
с tty как стандартный ввод, -у
переопределит эту проверку и позволит Обновить
команду добиться успеха. Однако, если нет tty (неинтерактивного сеанса), -у
вариант не переопределит этот чек. Я подтвердил это, используя более старую версию образа с ошибками:
# прерывает
docker run --rm mcr.microsoft.com/azure-functions/python:3.0.15066-python3.9-slim apt update -y
# успешно
docker run -t --rm mcr.microsoft.com/azure-functions/python:3.0.15066-python3.9-slim apt update -y
# подсказывает, что да/нет, чтобы продолжить
docker run -it --rm mcr.microsoft.com/azure-functions/python:3.0.15066-python3.9-slim apt update
# прерывает
docker run --rm mcr.microsoft.com/azure-functions/python:3.0.15066-python3.9-slim apt update