SonarQube в Docker поднимается двумя способами: через docker compose с PostgreSQL на одном сервере или через официальный Helm-чарт в Kubernetes. Для рабочей установки нужна внешняя база, встроенная H2 годится только для проверки. Ниже compose-файл, к…
10+ лет в маркетинге, 300+ клиентских проектов: сайты, реклама, боты. Создатель GoBanana (228K+ пользователей, 11.6 млн ₽ выручки) и VibeCoderz. Делаю AI-продукты сам через Claude Code, Cursor, Windsurf и консультирую тех, кто хочет так же.
Об авторе →Claude Code: новый CLI-агент от Anthropic
Anthropic выпустила Claude Code — терминальный AI-агент для разработчиков. Инструмент работает прямо в командной строке и умеет писать, редактировать и запускать код.
Zcode AI: Полный гид по визуальному интерфейсу для Claude Code и AI-агентов
Узнайте, как использовать Zcode для управления Claude Code, Gemini и Codex в едином GUI. Настройка провайдеров, MCP-серверов и визуальный вайбкодинг.
YouTube-канал с монетизацией из любой точки мира: Пошаговый гайд 2026
Инструкция по созданию YouTube-канала: обход блокировок SMS, настройка расширенных функций через виртуальные номера и правила безопасности для монетизации.
Windsurf Code Maps: Как глубоко понимать архитектуру проекта перед написанием кода
Полный гайд по Windsurf Code Maps, модели Sway 1.5 и Sway Grep. Узнайте, как визуализировать архитектуру кода и ускорить разработку в 13 раз.
Vk Fast Cash Strategy
Аудитория ВКонтакте — это те же люди, что и в Instagram, но 'социальный контракт' площадки другой. Если Instagram — это 'дорогой ресторан' с демонстрацией успеха, то VK — это 'душевная шашлычная'. Здесь не работает глянцевый 'успешный успех
SonarQube в Docker поднимается двумя способами: через docker compose с PostgreSQL на одном сервере или через официальный Helm-чарт в Kubernetes. Для рабочей установки нужна внешняя база, встроенная H2 годится только для проверки. Ниже compose-файл, команды Helm, проверка порта 9000 и таблица ошибок первого запуска.
TL;DR: SonarQube Community Build 26.9 запускается одним compose-файлом с PostgreSQL: порт 9000, три тома и три настройки ядра Linux. В Kubernetes его ставит официальный Helm-чарт 2026.4.1 с запросом памяти 2048M и лимитом 6144M. В статье файлы, команды, проверка запуска и разбор частых ошибок.
Нужен Linux-сервер с Docker и Compose, запас оперативной памяти и три настройки ядра: vm.max_map_count, лимиты файлов и потоков. Без них встроенный Elasticsearch не стартует.
Внутри него работает встроенный Elasticsearch, поэтому хост обязан пройти production-проверки этого движка. Документация Sonar на сентябрь 2026 требует vm.max_map_count не ниже 524288, fs.file-max не ниже 131072, а пользователю процесса 131072 открытых файла и 8192 потока. Для Docker эти значения берутся с хоста (документация Sonar).
На свежем сервере vm.max_map_count обычно стоит 65530, это значение по умолчанию для ядра Linux. Проверьте текущие цифры и поднимите их:
sysctl vm.max_map_count fs.file-max
sudo sysctl -w vm.max_map_count=524288
sudo sysctl -w fs.file-max=131072Команда sysctl -w действует до перезагрузки. Чтобы значения пережили рестарт, положите две строки в /etc/sysctl.d/99-sonarqube.conf: vm.max_map_count=524288 и fs.file-max=131072.
| Параметр | Минимум | Как проверить |
|---|---|---|
| vm.max_map_count | 524288 | sysctl vm.max_map_count |
| fs.file-max | 131072 | sysctl fs.file-max |
| Открытые файлы (nofile) | 131072 | ulimit -n |
| Потоки (nproc) | 8192 | ulimit -u |

Точной цифры "минимум для всех" у Sonar нет, зато есть ориентиры. В официальном Helm-чарте запрос памяти по умолчанию 2048M, лимит 6144M. Автор сборки SonarQube для 1С советует держать на хосте не меньше 6 ГБ свободной памяти (репозиторий Daabramov).
Отсюда прямой вывод: на самом маленьком VPS с 1 ГБ SonarQube не заведется. Берите сервер минимум с 4 ГБ, а лучше с 8. Тарифы с оплатой в рублях есть, например, у Timeweb.
Создайте папку, положите туда файл .env с паролем базы и docker-compose.yml из этой статьи, затем выполните docker compose up -d. Интерфейс откроется на порту 9000, когда закончит первичную инициализацию.
Официальный образ sonarqube на Docker Hub объединяет SonarQube Server и Community Build, слушает порт 9000 и хранит данные в каталогах data, logs и extensions. Compose-файл из двух сервисов, SonarQube и PostgreSQL 16, с тремя именованными томами и фиксированным тегом образа даст воспроизводимую установку на одном сервере.
Связка из двух контейнеров, SonarQube и PostgreSQL, подходит для установки на одном сервере. Официальный образ sonarqube на Docker Hub содержит и SonarQube Server, и Community Build. Контейнер слушает порт 9000, а данные лежат в трех каталогах: data, logs и extensions (Docker Hub).
Сначала пароль базы. Он лежит в .env, чтобы не попасть в репозиторий вместе с compose-файлом:
mkdir sonarqube && cd sonarqube
echo 'SONAR_DB_PASSWORD=замените-на-свой-пароль' > .envТеперь docker-compose.yml. Тег образа зафиксирован: Community Build выходит каждый месяц, а latest при пересоздании контейнера тихо утащит вас на новую версию.
<!-- ВНИМАНИЕ РЕДАКТОРУ: синтаксис файла проверен командой docker compose config, но полный запуск на живом Docker-хосте перед публикацией сделать обязательно. Сверьте тег образа на https://hub.docker.com/_/sonarqube/tags -->
services:
db:
image: postgres:16
container_name: sonarqube-db
restart: unless-stopped
environment:
POSTGRES_USER: sonar
POSTGRES_PASSWORD: ${SONAR_DB_PASSWORD}
POSTGRES_DB: sonar
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U sonar -d sonar"]
interval: 10s
timeout: 5s
retries: 10
sonarqube:
image: sonarqube:26.9.0.129388-community
container_name: sonarqube
restart: unless-stopped
depends_on:
db:
condition: service_healthy
ports:
- "9000:9000"
environment:
SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonar
SONAR_JDBC_USERNAME: sonar
SONAR_JDBC_PASSWORD: ${SONAR_DB_PASSWORD}
ulimits:
nofile:
soft: 131072
hard: 131072
nproc: 8192
volumes:
- sonarqube_data:/opt/sonarqube/data
- sonarqube_logs:/opt/sonarqube/logs
- sonarqube_extensions:/opt/sonarqube/extensions
volumes:
postgres_data:
sonarqube_data:
sonarqube_logs:
sonarqube_extensions:Три строки здесь решают больше всего проблем. depends_on с service_healthy не дает SonarQube стартовать раньше базы. Блок ulimits задает лимиты файлов и потоков внутри контейнера. Именованные тома избавляют от возни с правами на каталоги хоста.
Одна команда поднимает обе службы в фоне. Первый запуск скачивает образы, это примерно гигабайт, так что время зависит от канала.
docker compose up -d
docker compose logs -f sonarqubeВ логах ищите строку SonarQube is operational. Пока ее нет, он занят созданием таблиц и индексов Elasticsearch, и открывать страницу рано.

Образ по умолчанию использует встроенную базу H2, и Docker Hub прямо пишет, что она не подходит для рабочей установки. Для реальных проектов подключайте внешний PostgreSQL.
Встроенная база H2 лежит в каталоге data и по документации Docker Hub не подходит для рабочей установки. К одной схеме базы допускается ровно один экземпляр сервера. Внешний PostgreSQL сохраняет историю анализов отдельно от контейнера и позволяет делать обычные бэкапы через pg_dump.
Встроенная H2 хранится в каталоге data рядом с индексами Elasticsearch. Для демо она удобна: docker run -p 9000:9000 sonarqube:community и через минуту у вас интерфейс. Но Sonar называет такую базу непригодной для production, и у этого есть практический смысл.
Данные анализов копятся месяцами. Потеряв том data, вы теряете историю всех проектов сразу. С PostgreSQL история живет в базе, которую можно бэкапить обычным pg_dump и переносить на другой сервер.
Есть еще одно правило из документации. К одной схеме базы может подключаться только один экземпляр SonarQube. В Docker Swarm или Kubernetes два экземпляра на одной схеме повредят данные, и защиты от этого нет.
Устаревший совет из видео про SonarQube 7.1: править sonar.properties и раскомментировать строку PostgreSQL. В Docker это не нужно. Хватает трех переменных SONAR_JDBC_*, как в файле выше.

Добавьте репозиторий SonarSource, создайте namespace и выполните helm upgrade --install с параметром community.enabled=true. Базу подключайте через jdbcOverwrite, встроенная H2 в чарте только для теста.
Официальный Helm-чарт SonarSource версии 2026.4.1 ставит Community Build при community.enabled=true. Запрос памяти по умолчанию составляет 2048M, лимит 6144M. С версии 2026.1.0 чарт не содержит собственного PostgreSQL, поэтому рабочую базу подключают через параметры jdbcOverwrite.
Официальный чарт лежит в репозитории SonarSource, на Artifact Hub его версия 2026.4.1. По умолчанию он ставит SonarQube Community Build 26.8.0.126808, а более свежую сборку задает параметр community.buildNumber (Artifact Hub).
Для Community Build включите community.enabled, а параметр edition не указывайте вовсе. Пасскод мониторинга нужен для проб живости.
helm repo add sonarqube https://SonarSource.github.io/helm-chart-sonarqube
helm repo update
kubectl create namespace sonarqube
export MONITORING_PASSCODE="придумайте-пасскод"
helm upgrade --install -n sonarqube sonarqube sonarqube/sonarqube \
--set community.enabled=true \
--set monitoringPasscode=$MONITORING_PASSCODEТак вы получите рабочий стенд на встроенной H2. Для теста этого достаточно. Для постоянной работы переходите к файлу значений.
Начиная с версии чарта 2026.1.0 зависимость от PostgreSQL из чарта убрана, база внешняя. Видео про Helm, где Postgres создавался вместе со SonarQube, снято на чарте Bitnami. С официальным чартом Sonar так уже не работает.
Сохраните values.yaml и запустите установку с флагом -f values.yaml:
community:
enabled: true
monitoringPasscode: "придумайте-пасскод"
jdbcOverwrite:
enabled: true
jdbcUrl: "jdbc:postgresql://postgres.example.internal:5432/sonar"
jdbcUsername: "sonar"
jdbcSecretName: "sonarqube-db-secret"
jdbcSecretPasswordKey: "password"
resources:
requests:
memory: 6144M
limits:
memory: 6144MЧарт советует ставить requests и limits памяти одинаковыми, чтобы память стала гарантированным ресурсом. Значения по умолчанию, 2048M и 6144M, рассчитаны на три редакции сразу, и для Community Build их можно снижать по своей нагрузке. В продакшене еще отключают initSysctl.enabled и настраивают vm.max_map_count на уровне узлов.

Откройте http://адрес-сервера:9000 или запросите /api/system/status: ответ со статусом UP значит, что сервер готов. Войдите как admin с паролем admin и сразу задайте новый пароль.
Готовность сервера показывает запрос к /api/system/status: статус UP означает, что интерфейс на порту 9000 открыт. Логин и пароль по умолчанию admin и admin, при первом входе SonarQube просит новый пароль. В Helm-чарте пароль администратора выставляет отдельная задача setAdminPassword.
Проверку удобно делать из терминала, пока страница еще не открылась. Статус STARTING означает, что сервер грузится, UP означает готовность.
docker compose ps
curl -s http://localhost:9000/api/system/statusВ Kubernetes порт пробрасывается локально командой kubectl port-forward -n sonarqube svc/sonarqube-sonarqube 9000:9000. Имя сервиса зависит от имени релиза, сверьтесь с выводом kubectl get svc -n sonarqube.
Логин по умолчанию admin, пароль admin. Новый пароль система потребует при первом входе, не откладывайте это. Учтите, что чарт Helm выставляет пароль администратора через отдельную задачу, и значение по умолчанию у него тоже публичное. Задайте свое через setAdminPassword.newPassword или секрет.
Автор видео про Helm выяснил на практике: смена пароля в values после первой установки не подхватывается. Меняйте пароль в интерфейсе.

Чаще всего виноваты четыре причины: низкий vm.max_map_count, нехватка памяти, права на каталоги и база, которая не успела подняться. Диагностика начинается с docker compose logs sonarqube.
Четыре причины отказа при первом запуске повторяются чаще остальных: vm.max_map_count ниже 524288, нехватка памяти, закрытая для записи файловая система и база, не успевшая подняться. Начинать диагностику стоит с команды docker compose logs sonarqube, где причина обычно названа прямым текстом.
Ошибки первого запуска повторяются от сервера к серверу. Логи почти всегда называют причину прямым текстом, надо только дойти до нужной строки.
| Симптом в логах или поведении | Причина | Что делать |
|---|---|---|
| Контейнер падает, Elasticsearch жалуется на bootstrap checks | vm.max_map_count ниже 524288 | Поднять значение на хосте и перезапустить контейнер |
| Контейнер уходит в рестарт, в dmesg упоминается OOM | Не хватило памяти хосту | Освободить память или взять сервер побольше |
| Ошибки записи в data, logs или /tmp | Нет прав на каталоги | Использовать именованные тома, не закрывать /tmp от записи |
| Ошибка подключения к базе при старте | SonarQube стартовал раньше PostgreSQL | Добавить healthcheck и depends_on с service_healthy |
| Образ не скачивается | Docker Hub недоступен из вашей сети | Зеркало реестра провайдера или собственный registry |
Про /tmp есть нюанс. Начиная с версии 2026.1 инициализация Elasticsearch 8.x создает сокет-файлы в жестко заданном каталоге /tmp/.java_pid<PID>. Если вы запускаете контейнер с защищенной файловой системой, оставьте /tmp доступным на чтение и запись.
Максим: «Мог просто засесть до пяти ночи и править одну функцию, которая не работала. В моменте уже хотелось все закрыть. Но я понимал, что это можно решить и нужно решить, чтобы идти дальше.»
С SonarQube похожая история. Основное время уходит на sysctl, память и права, зато потом сервер работает без вмешательства. Если такие задачи повторяются, посмотрите готового ИИ-агента для DevOps, а compose-файл перед запуском можно показать Claude Code или другой AI IDE из каталога.

SonarQube тяжелый: Java, Elasticsearch и база требуют много памяти. На маленьком VPS он не запустится, а обновления Community Build выходят каждый месяц и требуют бэкапа.
SonarQube тянет Java, Elasticsearch и базу, поэтому на сервере с 1 ГБ памяти он не запустится. Community Build обновляется ежемесячно, а одна схема базы обслуживает только один экземпляр. Перед каждым обновлением фиксируйте тег образа и делайте дамп PostgreSQL командой pg_dump.
Про плюсы написано много, поэтому вот минусы без прикрас. Ему нужен запас памяти: чарт по умолчанию резервирует 2048M. Один экземпляр работает с одной схемой базы, а кластер предлагает только коммерческая Data Center Edition.
Community Build выходит ежемесячно. Зафиксируйте тег образа и перед обновлением сделайте бэкап:
docker compose exec -T db pg_dump -U sonar sonar > sonar-backup.sqlCommunity Build покрывает 21 язык и фреймворк, коммерческий SonarQube Server анализирует 30+ языков и дает продвинутый анализ безопасности (данные с Docker Hub). Если нужен глубокий поиск уязвимостей, Community не хватит.
Для российских команд добавляется сетевая часть. Если Docker Hub работает нестабильно, используйте зеркало реестра вашего провайдера или собственный registry. VPN-сервисы мы не рекомендуем. Начиная с чарта 2026.5.0 в нем нет встроенного ingress-nginx, поэтому для доступа снаружи ставьте свой ingress-контроллер или Gateway API.
Compose подходит для одного сервера и команды до нескольких десятков человек. Helm нужен, если у вас уже есть Kubernetes и требования к отказоустойчивости и мониторингу.
Docker compose подходит для одного сервера и небольшой команды, установка занимает около 15 минут. Helm оправдан при готовом Kubernetes-кластере, внешней PostgreSQL и мониторинге через Prometheus. Обе схемы используют один и тот же образ sonarqube и одну и ту же базу.
Выбор решает инфраструктура, которая у вас уже есть. Поднимать Kubernetes ради одной этой задачи нет смысла, а вот в существующий кластер он встает штатным чартом.
| Критерий | docker compose | Helm в Kubernetes |
|---|---|---|
| Время установки (ориентир) | около 15 минут | 15-30 минут при готовом кластере |
| База данных | Контейнер PostgreSQL рядом | Внешний PostgreSQL через jdbcOverwrite |
| Обновление | Сменить тег, docker compose up -d | helm upgrade с новой версией чарта |
| Мониторинг | Ручной, через логи | Prometheus-экспортер и PodMonitor в чарте |
| Кому подходит | Небольшая команда, один сервер | Команда с Kubernetes и DevOps |
Итог простой. Начинайте с compose, если кластера нет. Уходите в Helm, когда сервер должен жить рядом с остальной инфраструктурой. Обе схемы работают с одной и той же внешней PostgreSQL, так что переезд потом не сломает историю анализов.

Сколько времени занимает установка SonarQube в Docker?
Сама установка укладывается в 15 минут: настройки ядра, два файла и загрузка образов. Первый старт занимает еще несколько минут, пока сервер создает таблицы и индексы Elasticsearch.
Какой логин и пароль стоят по умолчанию?
Логин admin, пароль admin. При первом входе система потребует сменить пароль. В Helm-чарте пароль администратора выставляет отдельная задача, поэтому задайте свой через setAdminPassword.
Можно ли обойтись без PostgreSQL?
Можно, образ по умолчанию работает на встроенной H2. Но Docker Hub называет ее непригодной для production. Для тестов на ноутбуке подойдет, для рабочего сервера подключайте PostgreSQL.
Почему контейнер падает сразу после старта?
Почти всегда из-за vm.max_map_count ниже 524288 или нехватки памяти. Откройте docker compose logs sonarqube: там будет строка про bootstrap checks Elasticsearch или сообщение об убитом процессе.
Какую версию образа выбрать?
Для сообщества берите фиксированный тег вида 26.9.0.129388-community, а не latest. Для коммерческих редакций Docker Hub предлагает LTA-теги, например 2026.5-lta-developer. Актуальные теги смотрите на странице образа.
Чем Community Build отличается от SonarQube Server?
Community Build бесплатный, выходит ежемесячно и покрывает 21 язык и фреймворк. Коммерческий SonarQube Server анализирует 30+ языков и дает продвинутый анализ безопасности. Оба варианта лежат в одном образе sonarqube на Docker Hub.
Как обновить версию в Docker?
Сделайте pg_dump, поменяйте тег образа в compose-файле и выполните docker compose up -d. Для Kubernetes поменяйте версию в values и запустите helm upgrade. Перед обновлением прочитайте инструкцию Sonar по вашему пути версий.
Community Build: бесплатная сборка SonarQube для самостоятельной установки с ежемесячными релизами.
Elasticsearch: поисковый движок внутри SonarQube, из-за него нужны настройки ядра хоста.
H2: встроенная база SonarQube по умолчанию, подходит только для демо.
Helm-чарт: пакет с описанием установки приложения в Kubernetes.
LTA: Long-Term Active, версия SonarQube Server, которая поддерживается дольше обычных.
Том (volume): хранилище Docker, которое переживает пересоздание контейнера.
vm.max_map_count: параметр ядра Linux, ограничивающий число областей памяти у процесса.
Сервер работает, теперь подключайте проекты через сканер и настраивайте Quality Gate. Свежие обзоры инструментов для разработки собраны в каталоге AI-инструментов VibeCoderz. Если застряли на настройке под свой стек, запишитесь на консультацию к Максиму.
Обновлено: сентябрь 2026. Версии образа и чарта указаны по состоянию на 29 сентября 2026.