#Что означает ошибка
ERROR: unable to select packages: nginx (no such package)
ERROR: unable to select packages: ... (no such package) и ... breaks: world[...] в apk означают, что пакет не найден в подключённых репозиториях или конфликтует с уже установленными. Частая причина — не обновлён индекс (apk update), отключён репозиторий community, либо пакет есть только в другой ветке (edge).
Читайте строки после слова required by: они указывают на цепочку зависимостей.
Проверьте репозитории и версии.
Пакет не найден: не включён нужный репозиторий (community), индекс устарел или у пакета другое имя. Обновите индекс и проверьте /etc/apk/repositories.
#Причины и решения
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Устарел индекс | Не обновлялся. | apk update. |
| Репозиторий community отключён | Нет строки. | Добавьте. |
| Другое имя | В Alpine иначе. | apk search. |
| Устаревшая версия | Релиз снят. | Обновите. |
#Пошаговое решение
- Выполните apk updateВ Alpine Linux откройте терминал, получите права администратора через
su -либо используйте доступныйsudo, затем выполнитеapk update. Успех — списки репозиториев обновлены безtemporary errorиUNTRUSTED signature. Если появилась ошибка, запишите URL зеркала и проверьте/etc/apk/repositories; не смешивайте ветки stable и edge без понимания последствий. - Проверьте /etc/apk/repositoriesВ Alpine откройте терминал или консоль контейнера и выполните
cat /etc/apk/repositories. Убедитесь, что перечислены адреса репозиториев именно для вашего выпуска Alpine (cat /etc/alpine-release) и нужной архитектуры (apk --print-arch). Строки с#отключены. Не подменяйте репозитории веткойedgeбез необходимости; при ошибках подключения проверьте сеть и DNS, затем запуститеapk update. - Найдите пакет через apk searchВ консоли Alpine введите
apk search -v ЧАСТЬ_НАЗВАНИЯ, заменив заглушку фактическим названием искомого пакета. Если ничего не найдено, проверьте точное написание и доступность пакета для текущего выпуска/архитектуры через официальный каталог пакетов Alpine. Если найден только пакет вcommunity, убедитесь, что репозиторий вашей версии подключён, а затем повторитеapk update. Не ставьте случайный APK из интернета в обход проверяемых репозиториев. - Разберите причину конфликтаПрочитайте строку сразу после
unable to select packages: она обычно указывает конкретный пакет и ограничение версии, конфликта или отсутствия. Выполнитеapk policy ИМЯ_ПАКЕТА, подставив название из ошибки, иapk info -e ИМЯ_ПАКЕТА, чтобы проверить доступную/установленную версию. Не используйте принудительную установку и смешениеstableсedgeради снятия конфликта. Если зависимости требуют несовместимые выпуски, выберите совместимую версию приложения или официальный образ системы. - Обновите образ или системуУзнайте выпуск и архитектуру через
cat /etc/alpine-releaseиapk --print-arch. Для контейнера предпочтительнее обновить исходныйFROM alpine:ВЕРСИЯв своём Dockerfile на поддерживаемый выпуск и пересобрать образ после проверки совместимости приложения; не меняйте базовый образ работающего сервиса без тестирования. Для установленной Alpine следуйте официальной инструкции обновления между конкретными версиями с резервной копией конфигурации. После обновления запуститеapk updateи повторите поиск пакета. - Обновление индекса и поиск пакетаLinux · Терминал (Bash)КомандаОбновление индекса и поиск пакета.
apk updateapk search nginx
#Индекс и репозитории
Обновите индекс: apk update. Проверьте /etc/apk/repositories: должны быть строки https://dl-cdn.alpinelinux.org/alpine/v3.20/main и /community (версия по cat /etc/alpine-release). Раскомментируйте community. Найти пакет: apk search -v имя, информацию: apk info -a имя. Сайт поиска пакетов — . Для тестовых пакетов подключают testing через тег: apk add пакет@testing.
#Конфликты зависимостей
Сообщение breaks: world[...] показывает конфликт с уже установленным пакетом. Посмотрите, что установлено: apk info | grep имя. Удалите конфликтующий: apk del имя. Версия библиотеки может требовать обновления системы: apk upgrade --available. Мешает закреплённая версия в /etc/apk/world (например, имя=1.2.3): отредактируйте файл и запустите apk fix.
#Сеть и Docker
Если apk update не получает индекс, проверьте DNS и доступ к CDN (ping dl-cdn.alpinelinux.org), замените зеркало (setup-apkrepos -f выберет быстрое). В Dockerfile выполняйте apk add --no-cache пакет — кэш не создаётся. Для устаревших образов (Alpine 3.8 и раньше) пакеты удалены из CDN; обновите базовый образ. Для архитектур ARM пакетов может не быть — проверьте на pkgs.alpinelinux.org фильтр архитектуры.
apk updatecat /etc/alpine-releasecat /etc/apk/repositoriesapk search -v nginx