Объедините три строки RUN
, которые вы показываете, в одну команду:
FROM debian:latest
RUN apt-get update \
&& apt-get install -y \
ca-certificates \
unzip
Существует комбинация двух вещей, которая приводит к этой ошибке 404. С одной стороны, Docker будет кэшировать отдельные шаги Dockerfile: он видит, что, начиная с debian:latest
, это уже RUN apt-get update
, поэтому он использует версию этой команды со вчерашнего дня. С другой стороны, Debian довольно часто обновляет свои репозитории, добавляя очень незначительные обновления (см. +deb9u1
часть этого номера версии), и когда они это делают, они удаляют предыдущую версию из своих репозиториев. Эта комбинация означает, что вы можете находиться в последовательности, в которой вы используете кешированную версию индекса apt-get update
, но версия пакета, которую он упоминает, больше не существует.
Объединение этих строк вместе, как это, означает Docker всегда будет запускать и apt-get update
, и apt-get install
вместе; если вы добавите пакет в список, он повторно запустит шаг update
перед попыткой загрузки. Это позволяет избежать этой проблемы за счет небольшого дополнительного времени загрузки при изменении списка пакетов.