Вопрос или проблема
В связи с последними обнаруженными уязвимостями CVE-2023-52425, CVE-2023-52426, мне нужно обновить alpine/expat с 2.5.0-r2 до expat 2.6.0-r0 в моем образе Docker на базе Alpine.
Я пробовал различные способы (см. ниже) для обновления версии пакета expat во время сборки Docker, но полученный образ по-прежнему показывает alpine/expat 2.5.0-r2. Я был бы признателен за любые советы по этому поводу.
Ссылка:
https://alpine.pkgs.org/3.19/alpine-main-x86_64/expat-2.6.0-r0.apk.html
В моем Dockerfile я попробовал следующие 3 способа установки expat 2.6.0-r0, но безуспешно:
-
RUN apk update && apk add –upgrade –no-cache expat
-
RUN curl -O http://dl-cdn.alpinelinux.org/alpine/v3.19/main/x86_64/expat-2.6.0-r0.apk
RUN apk add –allow-untrusted expat-2.6.0-r0.apk -
RUN apk add –upgrade –no-cache expat –repository=’https://pkgs.alpinelinux.org/package/v3.19/main/x86_64/expat’
-
RUN echo http://dl-cdn.alpinelinux.org/alpine/v3.19/main/x86_64/ >> /etc/apk/repositories
RUN apk –no-cache –update add expat
В моем Dockerfile, собранном в Eclipse FROM eclipse-temurin:17.0.9_9-jre-alpine
, я добавляю:
RUN apk add --upgrade expat
После сборки Docker-образа SNYK больше не обнаруживал никаких уязвимостей.
В итоге мне удалось решить эту проблему:
так как я собирал свой образ поэтапно, если я размещал
apk add --upgrade expat
на последнем этапе, была применена последняя версия.
Сначала я пытался применить обновление на 2-ом этапе сборки,
и, как мне кажется, обновления не распространились на 3-ий этап.
Ответ или решение
Чтобы решить проблему обновления пакета expat
до версии 2.6.0-r0
в образе Docker на базе Alpine, учтите несколько важных моментов, которые повлияют на успешное выполнение этой задачи. Вы столкнулись с проблемами, когда попытки обновления не приводили к желаемому результату.
Возможные решения
-
Правильный выбор образа: Убедитесь, что базовый образ, от которого вы начинаете сборку, действительно предполагает использование нужной версии пакета. В вашем случае образ
eclipse-temurin:17.0.9_9-jre-alpine
может по умолчанию использовать более старую версиюexpat
. -
Обновление в конечном слое сборки: Как вы и заметили, если вы используете многоступенчатую сборку Docker, важно обновлять пакет на последнем этапе сборки. Это связано с тем, что изменения в промежуточных этапах могут не передаваться. Убедитесь, что вызов
apk add --upgrade expat
осуществляется в последнем слое вашего Dockerfile. Пример:FROM eclipse-temurin:17.0.9_9-jre-alpine AS builder # Другие команды для сборки FROM eclipse-temurin:17.0.9_9-jre-alpine RUN apk update && apk add --no-cache expat
-
Проверка репозиториев: Убедитесь, что ваш образ Alpine настроен на использование правильно конфигурированных репозиториев. Вы можете добавить или обновить репозиторий в
/etc/apk/repositories
. Убедитесь, что у вас есть актуальные ссылки:RUN echo "http://dl-cdn.alpinelinux.org/alpine/v3.19/main/" >> /etc/apk/repositories RUN apk update && apk add --no-cache expat
-
Использование флага
--no-cache
: При добавлении пакетов рекомендуется использовать флаг--no-cache
, чтобы избежать использования кэша старых версий пакетов. -
Проверка установленных пакетов: После завершения сборки образа, не забудьте проверить установленную версию
expat
с помощью команд:RUN apk info expat
Это обеспечит вам уверенность в том, что нужная версия установлена.
Пример полного Dockerfile
Вот пример Dockerfile, который должен работать для вашего случая.
FROM eclipse-temurin:17.0.9_9-jre-alpine AS builder
# Ваши команды для сборки
FROM eclipse-temurin:17.0.9_9-jre-alpine
RUN echo "http://dl-cdn.alpinelinux.org/alpine/v3.19/main/" >> /etc/apk/repositories
RUN apk update && apk add --no-cache expat
RUN apk info expat # Для проверки версии
Заключение
Убедитесь, что все команды выполняются в правильном порядке и на нужной стадии сборки. Применение этих рекомендаций должно помочь вам успешно обновить expat
до версии 2.6.0-r0
и устранить выявленные уязвимости.