QuestDB has images for both Linux/macOS and Windows on Docker Hub.
To begin, install Docker. You can find guides for your platform on the official documentation.
Once Docker is installed, you will need to pull QuestDB's image from Docker Hub and create a container.
This can be done with a single command using:
This command starts a Docker container from
questdb/questdb image. In
addition, it exposes some ports, allowing you to explore QuestDB.
In order to configure QuestDB, it is recommended to mount a
volume to allow data persistance. This can be
done by adding a
-v flag to the above command:
Below each parameter is described in detail.
-p parameter to expose ports#
This parameter will expose a port to the host. You can specify:
-p 9000:9000- REST API and Web Console
-p 9009:9009- InfluxDB line protocol
-p 8812:8812- Postgres wire protocol
-p 9003:9003- Min health server
All ports are optional, you can pick only the ones you need. For example, it is
enough to expose
8812 if you only plan to use
InfluxDB line protocol.
-v parameter to mount storage#
This parameter will make a local directory available to QuestDB Docker container. It will have all data ingested to QuestDB, server logs and configuration.
The QuestDB root_directory is located
/var/lib/questdb path in the container.
questdb/questdb points to the latest QuestDB version available on
Docker. However, it is recommended to define the version used.
You can check the status of your container with
It also lists the exposed ports, container name, uptime and more:
- has an id of
- uses ports
9000, for Postgres wire protocol and HTTP respectively
- is using a
- ran java to start the binary
- is 3 seconds old
- has been up for 2 seconds
- has the unfortunate name of
For full container status information, see the
docker ps manual.
Docker may generate a runtime error.
The error may not be accurate, as the true culprit is often indicated higher up in the logs.
To see the full log, retrieve the UUID - also known as the
CONTAINER ID - using
Now pass the
CONTAINER ID - or
dd363939f261 - to the
docker logs command:
Note that the log will pull from
/var/lib/questdb/conf/log.conf by default.
Sharing this log when seeking support for Docker deployments will help us find the root cause.
When QuestDB is running, you can start interacting with it:
9000is for REST. More info is available on the REST documentation page.
8812is used for Postgres. Check our Postgres reference page.
9009is dedicated to InfluxDB Line Protocol. Consult our InfluxDB protocol page.
Volumes can be mounted to the QuestDB Docker container so that data may be
persisted or server configuration settings may be passed to an instance. The
following example demonstrated how to mount the current directory to a QuestDB
container using the
-v flag in a Docker
The current directory will then have data persisted to disk for convenient migration or backups:
For details on passing QuestDB server settings to a Docker container, see the Docker section of the server configuration documentation.
For information about the file structure, see root directory.
It is possible to upgrade your QuestDB instance on Docker when a volume is mounted to maintain data persistence.
- Check the release notes and ensure that necessary backup is completed.
- Upgrading an instance is possible only when the original instance has a volume mounted. Without mounting a volume for the original instance, the following steps create a new instance and data in the old instance cannot be retrieved.
docker psto copy the container name or ID:
- Stop the instance and then remove the container:
- Download the latest QuestDB image:
- Start a new container with the new version and the same volume mounted:
When mounting a volume to a Docker container, a logging configuration file may
be provided in the container located at
For example, a file with the following contents can be created:
The current directory can be mounted:
The container logs will be written to disk using the logging level and file name
provided in the
conf/log.conf file, in this case in
For more information on logging, see the configuration reference documentation.
Running the following command will create a new container for the QuestDB image:
By giving the container a name with
--name container_name, we have an easy way
to refer to the container created by run later on:
If we want to re-use this container and its data after it has been stopped, we can use the following commands:
Alternatively, restart it using the