Docker на Android (Termux): udocker, QEMU и решение типичных ошибок
Как установить Docker на Android (Termux) и запустить свой сервис: полный гайд с udocker, QEMU и решением типичных ошибок
Введение
Многие разработчики и энтузиасты хотят запускать Docker-контейнеры прямо на Android-смартфоне. Официальный пакет docker в Termux отсутствует в обычных репозиториях, а pkg install docker выдаёт ошибку «Unable to locate package docker». В этой статье разберём все рабочие способы, подробно остановимся на udocker (самый быстрый вариант без root), покажем, как авторизоваться в своём приватном registry и решить типичные ошибки при pull, а также как поднять свой сервис.
Почему нельзя просто поставить Docker
- Пакет Docker есть только в
root-repo(нужен root + подходящее ядро с namespaces, cgroups, overlayfs). - Даже с root на большинстве стоковых Android-ядер
dockerdне работает. - Termux — обычное Android-приложение, у него нет привилегий для создания настоящих контейнеров.
Варианты установки
1. QEMU + Alpine (полноценный Docker, без root)
Самый надёжный способ получить настоящий Docker (включая build и push).
☯
Terminal:
⌕
≡
✕
pkg update -y && pkg upgrade -y pkg install qemu-utils qemu-common qemu-system-x86_64-headless wget -y mkdir -p ~/alpine && cd ~/alpine wget https://dl-cdn.alpinelinux.org/alpine/v3.20/releases/x86_64/alpine-virt-3.20.2-x86_64.iso qemu-img create -f qcow2 alpine.img 5G
Запуск VM (пример):
☯
Terminal:
⌕
≡
✕
qemu-system-x86_64 -machine q35 -m 1024 -smp cpus=2 -cpu qemu64 \ -drive if=pflash,format=raw,readonly=on,file=$PREFIX/share/qemu/edk2-x86_64-code.fd \ -netdev user,id=n1,dns=8.8.8.8,hostfwd=tcp::2222-:22 \ -device virtio-net,netdev=n1 \ -cdrom alpine-virt-3.20.2-x86_64.iso -nographic alpine.img
Внутри Alpine: setup-alpine → после перезагрузки apk add docker → service docker start → rc-update add docker.
Плюс: полноценный Docker. Минус: медленнее, жрёт батарею и RAM.
2. udocker (рекомендуется большинству)
User-space реализация Docker. Без root, без QEMU, значительно быстрее.
☯
Terminal:
⌕
≡
✕
pkg install git -y git clone --depth 1 https://github.com/George-Seven/Termux-Udocker ~/Termux-Udocker bash ~/Termux-Udocker/install_udocker.sh
После установки используйте команды udocker вместо docker.
Что умеет udocker:
pull,create,run,login,logout- Работа с приватными registry
- Запуск большинства образов
Чего не умеет:
pushобразов- Полноценный
docker build(лучше собирать на ПК)
3. proot-distro (ограниченно)
☯
Terminal:
⌕
≡
✕
pkg install proot-distro proot-distro install debian proot-distro login debian # внутри: apt install docker.io
CLI работает, dockerd — почти никогда.
Авторизация в своём (приватном) registry
Пример с Gitea/GitLab-подобным registry (admin-dixsu-git.dix.su):
☯
Terminal:
⌕
≡
✕
udocker logout -a udocker --insecure login --registry=https://admin-dixsu-git.dix.su --username=ВАШ_ЛОГИН
Затем pull:
☯
Terminal:
⌕
≡
✕
udocker --insecure pull admin-dixsu-git.dix.su/dixsu/grid-bot:latest
Важно:
- В
--registryуказывайте только хост, а не полный путь к образу. - Для HTTP/самоподписанных сертификатов используйте
--insecure.
Решение типичной ошибки «Error: no files downloaded»
Ошибка часто появляется на больших слоях (100+ МБ), даже если HTTP 200 уже пришёл.
Диагностика:
☯
Terminal:
⌕
≡
✕
df -h $HOME ls -lh ~/.udocker/layers/*.tmp # временные файлы
Исправление:
- Удалить временные файлы:
rm -f ~/.udocker/layers/*.tmp - Повторить pull.
- Увеличить таймаут: ``
bash export UDOCKER_CURL_TIMEOUT=3600 udocker --insecure pull admin-dixsu-git.dix.su/dixsu/grid-bot:latest`` - Если не помогает — скачать образ на компьютере (
docker save) и перенести: ``bash udocker load -i grid-bot.tar``
В логах с -D видно, что манифест и токены получаются успешно, а падает именно запись большого blob.
Как поднять свой сервис
После успешного pull:
☯
Terminal:
⌕
≡
✕
udocker create --name=grid-bot admin-dixsu-git.dix.su/dixsu/grid-bot:latest udocker run --name=grid-bot -p 8080:8080 grid-bot
Или сразу:
☯
Terminal:
⌕
≡
✕
udocker run -p 8080:8080 admin-dixsu-git.dix.su/dixsu/grid-bot:latest
Для фонового запуска используйте tmux или termux-wake-lock + скрипт.
Рекомендации по выбору способа
| Цель | Лучший способ | Комментарий |
| Просто запустить контейнер | udocker | Быстро, без root |
| Нужен build + push | QEMU + Alpine | Полноценный Docker |
| Есть root + хорошее ядро | root-repo | Редко работает |
| Максимальная совместимость | QEMU | Самый надёжный |
Заключение
На Android полноценный Docker «из коробки» поставить нельзя, но с udocker или QEMU задача решается. Самый практичный путь для большинства пользователей — udocker: он позволяет авторизоваться в своём registry, скачивать образы и запускать сервисы. Главные грабли — большие слои и неправильный формат --registry. Следуйте шагам выше, и ваш сервис будет работать прямо на смартфоне.
Если возникнут новые ошибки — присылайте полный вывод с udocker -D, разберём точечно.
-
Создано 19.10.2026 06:41:00
-
Roman Sakhno

Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.