Skip to content

Instantly share code, notes, and snippets.

@Warchant
Last active June 30, 2025 15:13
Show Gist options
  • Select an option

  • Save Warchant/0d0f0104fe7adf3b310937d2db67b512 to your computer and use it in GitHub Desktop.

Select an option

Save Warchant/0d0f0104fe7adf3b310937d2db67b512 to your computer and use it in GitHub Desktop.
docker-compose file to setup production-ready sonarqube
version: "3"
services:
sonarqube:
image: sonarqube
expose:
- 9000
ports:
- "127.0.0.1:9000:9000"
networks:
- sonarnet
environment:
- sonar.jdbc.url=jdbc:postgresql://db:5432/sonar
- sonar.jdbc.username=sonar
- sonar.jdbc.password=sonar
volumes:
- sonarqube_conf:/opt/sonarqube/conf
- sonarqube_data:/opt/sonarqube/data
- sonarqube_extensions:/opt/sonarqube/extensions
- sonarqube_bundled-plugins:/opt/sonarqube/lib/bundled-plugins
db:
image: postgres
networks:
- sonarnet
environment:
- POSTGRES_USER=sonar
- POSTGRES_PASSWORD=sonar
volumes:
- postgresql:/var/lib/postgresql
- postgresql_data:/var/lib/postgresql/data
networks:
sonarnet:
volumes:
sonarqube_conf:
sonarqube_data:
sonarqube_extensions:
sonarqube_bundled-plugins:
postgresql:
postgresql_data:
@tidusete
Copy link
Copy Markdown

Good Job!

@MrZoidberg
Copy link
Copy Markdown

@wrlyonsjr
Copy link
Copy Markdown

@hoffic-cz I had the same problem because the user in the container (named "sonarqube") had no write permission to the mount location on the host. I believe docker-compose was creating those directories as root. I solved it by creating those directories manually and opening up the permissions. I'll bet there's a more secure way involving making a sonarqube user on the host machine.

@partypeopleland
Copy link
Copy Markdown

thanks a lot!
i can use it on docker-for-windows now.

@jpirir
Copy link
Copy Markdown

jpirir commented Mar 27, 2020

In a small instance, add
sudo sysctl -w vm.max_map_count=262144
elastic/elasticsearch-docker#92

and append to the compose

      ulimits:
          nofile:
              soft: 65536
              hard: 65536

@Pingolus
Copy link
Copy Markdown

Thanks everybody.

If you need to disable seccomp, you can add this environment property (not recommanded but needed if your system kernel is not compliant with) :
- sonar.search.javaAdditionalOpts=-Dbootstrap.system_call_filter=false

My updated docker-compose file :

version: "3"

services:
  sonarqube:
    image: sonarqube:8.2-community
    container_name: sonarqube
    hostname: sonarqube
    expose:
      - 9000
    user: "999"
    ports:
      - <your-host-port>:9000
    networks:
      - sonarnet
    environment:
    - sonar.jdbc.username=sonar
    - sonar.jdbc.password=<your-sonar-pwd>
    - sonar.jdbc.url=jdbc:postgresql://db/sonar
    - sonar.search.javaAdditionalOpts=-Dbootstrap.system_call_filter=false
    volumes:
      - <your-volume-path>:/opt/sonarqube/logs
      - <your-volume-path>:/opt/sonarqube/data
      - <your-volume-path>:/opt/sonarqube/extensions

  db:
    image: postgres:12.0
    container_name: sonarqube-pg
    hostname: sonarqube-pg
    networks:
      - sonarnet
    environment:
      - POSTGRES_USER=sonar
      - POSTGRES_PASSWORD=<your-sonar-pwd>
    volumes:
      - <your-volume-path>:/var/lib/postgresql
      - <your-volume-path>:/var/lib/postgresql/data

networks:
  sonarnet:

@gustinsi
Copy link
Copy Markdown

gustinsi commented Nov 23, 2020

Thanks everyone!

I had a few issues to fix. In the end, this worked for me:

version: "3"

services:
  sonarqube:
    image: sonarqube:8.5.1-community
    container_name: sonarqube
    hostname: sonarqube
    ports:
      - 9000:9000
    environment:
      - sonar.jdbc.username=sonar
      - sonar.jdbc.password=<your-sonar-pswd>
      - sonar.search.javaAdditionalOpts=-Dbootstrap.system_call_filter=false
    volumes:
      - <your-volume-path>/logs:/opt/sonarqube/logs
      - <your-volume-path>/data:/opt/sonarqube/data
      - <your-volume-path>/extensions:/opt/sonarqube/extensions

  db:
    image: postgres:13.1
    container_name: db
    hostname: db
    environment:
      - POSTGRES_USER=sonar
      - POSTGRES_PASSWORD=<your-sonar-pswd>
    volumes:
      - pg_db:/var/lib/postgresql
      - pg_data:/var/lib/postgresql/data
    ulimits:
      nofile:
        soft: 65536
        hard: 65536

volumes:
  pg_db:
    driver: local
  pg_data:
    driver: local

@humbertodias
Copy link
Copy Markdown

Execute it before

sysctl -w vm.max_map_count=262144

Ref: https://www.elastic.co/guide/en/elasticsearch/reference/current/vm-max-map-count.html

@xts-velkumars
Copy link
Copy Markdown

@gustinsi, working charm

@jeffqev
Copy link
Copy Markdown

jeffqev commented May 24, 2021

If you want, you can also scan with docker Other (for JS, TS, Go, Python, PHP, ...) using sonarsource/sonar-scanner-cli

in your src folder
docker run --rm -it -v $(pwd):/usr/src --network=host sonarsource/sonar-scanner-cli bash

And just copy the sonarqube commands in the container bash
sonar-scanner \
-Dsonar.projectKey=yourproyectkey\
-Dsonar.sources=. \
-Dsonar.host.url=http://localhost:9000 \
-Dsonar.login=yourproyectlogin

@wellingtonlorindo
Copy link
Copy Markdown

Execute it before

sysctl -w vm.max_map_count=262144

Ref: https://www.elastic.co/guide/en/elasticsearch/reference/current/vm-max-map-count.html

It works! Thanks a lot @humbertodias

@iguilhermeluis
Copy link
Copy Markdown

It works! Thanks

@AnantDevop
Copy link
Copy Markdown

at org.elasticsearch.env.NodeMetadata.upgradeToCurrentVersion(NodeMetadata.java:80)
sonarqube | at org.elasticsearch.env.NodeEnvironment.loadNodeMetadata(NodeEnvironment.java:482)
sonarqube | at org.elasticsearch.env.NodeEnvironment.(NodeEnvironment.java:356)
sonarqube | at org.elasticsearch.node.Node.(Node.java:427)
sonarqube | at org.elasticsearch.node.Node.(Node.java:309)
sonarqube | at org.elasticsearch.bootstrap.Bootstrap$5.(Bootstrap.java:234)
sonarqube | at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:234)
sonarqube | at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:434)
sonarqube | at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:166)
sonarqube | at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:157)
sonarqube | at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:77)
sonarqube | at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:112)
sonarqube | at org.elasticsearch.cli.Command.main(Command.java:77)
sonarqube | at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:122)
sonarqube | at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:80)
sonarqube | For complete error details, refer to the log at /opt/sonarqube/logs/sonarqube.log
sonarqube | 2022.11.18 02:36:00 WARN app[][o.s.a.p.AbstractManagedProcess] Process exited with exit value [es]: 1
sonarqube | 2022.11.18 02:36:00 INFO app[][o.s.a.SchedulerImpl] Process[es] is stopped
sonarqube | 2022.11.18 02:36:00 INFO app[][o.s.a.SchedulerImpl] SonarQube is stopped
sonarqube | 2022.11.18 02:37:01 INFO app[][o.s.a.AppFileSystem] Cleaning or creating temp directory /opt/sonarqube/temp
sonarqube | 2022.11.18 02:37:01 INFO app[][o.s.a.es.EsSettings] Elasticsearch listening on [HTTP: 127.0.0.1:9001, TCP: 127.0.0.1:44793]
sonarqube | 2022.11.18 02:37:01 INFO app[][o.s.a.ProcessLauncherImpl] Launch process[[key='es', ipcIndex=1, logFilenamePrefix=es]] from [/opt/sonarqube/elasticsearch]: /opt/sonarqube/elasticsearch/bin/elasticsearch

getting this error can anyone help

@aawoyemi142
Copy link
Copy Markdown

aawoyemi142 commented Nov 19, 2022 via email

@itsecforu
Copy link
Copy Markdown

how to correct update tag of sonarqube image version ?

I edited compose.yml and started docker stack up -c docker-compose.yml sonarqube, but not works

@aawoyemi142
Copy link
Copy Markdown

aawoyemi142 commented Jan 10, 2023 via email

@kozla13
Copy link
Copy Markdown

kozla13 commented May 5, 2023

how to set the init admin username and password ?

@aawoyemi142
Copy link
Copy Markdown

aawoyemi142 commented May 5, 2023 via email

@kozla13
Copy link
Copy Markdown

kozla13 commented May 5, 2023

i want just to automate some stuff for local development

@Warchant
Copy link
Copy Markdown
Author

Warchant commented May 9, 2023 via email

@itsecforu
Copy link
Copy Markdown

itsecforu commented May 11, 2023

$ docker ps -q | xargs  docker stats --no-stream
$ k8s_database_harbor-harbor-database-0_harbor_62dc87ee-0df7-4359-9425-bf135bcc79a3_0  
                    910.31%  ```

@FlorianWolters
Copy link
Copy Markdown

FlorianWolters commented Jun 20, 2023

Just my 2 cents:

  1. The "official" docker-compose.yml usage example for Sonarqube with PostgreSQL can be found here.

  2. I was able to start SonarQube v10 + PostgreSQL v15.3 on a Windows 11 machine with the following docker-compose.yml file.

  3. Edit: The alternative for SONAR_ES_BOOTSTRAP_CHECKS_DISABLE=true seems to be the following:

    1. Create (or edit) the file %USERPROFILE%\.wslconfig.

    2. Add the following:

      [wsl2]
      kernelCommandLine="sysctl.vm.max_map_count=262144"
      

docker-compose.yml:

version: "3"

services:
  sonarqube:
    image: sonarqube:10.0.0-community
    hostname: sonarqube
    container_name: local-sonarqube
    depends_on:
      - db
    environment:
      - SONAR_JDBC_URL=jdbc:postgresql://db:5432/sonar
      - SONAR_JDBC_USERNAME=sonar
      - SONAR_JDBC_PASSWORD=sonar
      # The following (commented out) setting is a workaround for the following error:
      #
      #     max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
      #
      # It is better to add the following to the file `%USERPROFILE%\.wslconfig` on Windows instead:
      #
      #     [wsl2]
      #     kernelCommandLine="sysctl.vm.max_map_count=262144"
      #- SONAR_ES_BOOTSTRAP_CHECKS_DISABLE=true
    volumes:
      - sonarqube_data:/opt/sonarqube/data
      - sonarqube_extensions:/opt/sonarqube/extensions
      - sonarqube_logs:/opt/sonarqube/logs
    ports:
      - "9000:9000"
  db:
    image: postgres:15.3
    hostname: postgres
    container_name: local-postgres-for-sonarqube
    environment:
      - POSTGRES_USER=sonar
      - POSTGRES_PASSWORD=sonar
      - POSTGRES_DB=sonar
    volumes:
      - postgresql:/var/lib/postgresql
      - postgresql_data:/var/lib/postgresql/data

volumes:
  sonarqube_data:
  sonarqube_extensions:
  sonarqube_logs:
  postgresql:
  postgresql_data:

@fabi6ferreira
Copy link
Copy Markdown

Thank you @Warchant . It works for me 👍

@prhr
Copy link
Copy Markdown

prhr commented Jun 30, 2025

services:
sonarqube_db:
image: postgres:17-alpine
container_name: sonarqube_db
restart: unless-stopped
environment:
POSTGRES_USER: sonar
POSTGRES_PASSWORD: sonar
POSTGRES_DB: sonar
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U sonar"]
interval: 10s
timeout: 5s
retries: 5
networks:
- sonar-net

sonarqube:
image: sonarqube:latest
container_name: sonarqube
restart: unless-stopped
depends_on:
sonarqube_db:
condition: service_healthy
ports:
- "9000:9000"
environment:
SONAR_JDBC_URL: jdbc:postgresql://sonarqube_db:5432/sonar
SONAR_JDBC_USERNAME: sonar
SONAR_JDBC_PASSWORD: sonar
volumes:
- sonarqube_data:/opt/sonarqube/data
- sonarqube_extensions:/opt/sonarqube/extensions
- sonarqube_logs:/opt/sonarqube/logs
networks:
- sonar-net
command:
- -Dsonar.ce.javaOpts=-Xmx1192m
- -Dsonar.web.javaOpts=-Xmx1192m

volumes:
postgres_data:
sonarqube_data:
sonarqube_extensions:
sonarqube_logs:

networks:
sonar-net:
driver: bridge

#########################

sysctl -w vm.max_map_count=262144

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment