content/influxdb3/explorer/install.md
Use Docker to install and run InfluxDB 3 Explorer.
<!-- BEGIN TOC --> <!-- END TOC -->Get {{% product-name %}} running in minutes:
Run the Explorer container:
docker run --detach \
--name influxdb3-explorer \
--publish 8888:80 \
influxdata/influxdb3-ui:{{% latest-patch %}}
Access the Explorer UI at http://localhost:8888
Install Docker or Docker Desktop if you haven't already.
[!Tip] To get the latest updates, run the following command before starting the container:
bashdocker pull influxdata/influxdb3-ui:{{% latest-patch %}}
{{< code-tabs-wrapper >}} {{% code-tabs %}} Docker run Docker Compose {{% /code-tabs %}}
{{% code-tab-content %}}
docker run --detach \
--name influxdb3-explorer \
--publish 8888:80 \
influxdata/influxdb3-ui:{{% latest-patch %}}
{{% /code-tab-content %}}
{{% code-tab-content %}}
# docker-compose.yml
version: '3.8'
services:
explorer:
image: influxdata/influxdb3-ui:{{% latest-patch %}}
container_name: influxdb3-explorer
ports:
- "8888:80"
volumes:
- ./config:/app-root/config:ro
restart: unless-stopped
Start the container:
docker-compose up -d
{{% /code-tab-content %}} {{< /code-tabs-wrapper >}}
For production deployments with persistence, admin mode, and automatic image updates:
{{< code-tabs-wrapper >}} {{% code-tabs %}} Docker run Docker Compose {{% /code-tabs %}}
{{% code-tab-content %}}
docker run --detach \
--name influxdb3-explorer \
--pull always \
--publish 8888:80 \
--volume $(pwd)/db:/db:rw \
--volume $(pwd)/config:/app-root/config:ro \
--env SESSION_SECRET_KEY=$(openssl rand -hex 32) \
--restart unless-stopped \
influxdata/influxdb3-ui:{{% latest-patch %}} \
--mode=admin
{{% /code-tab-content %}}
{{% code-tab-content %}}
# docker-compose.yml
version: '3.8'
services:
explorer:
image: influxdata/influxdb3-ui:{{% latest-patch %}}
container_name: influxdb3-explorer
pull_policy: always
command: ["--mode=admin"]
ports:
- "8888:80"
volumes:
- ./db:/db:rw
- ./config:/app-root/config:ro
- ./ssl:/etc/nginx/ssl:ro
environment:
SESSION_SECRET_KEY: ${SESSION_SECRET_KEY:-changeme123456789012345678901234}
restart: unless-stopped
Create a .env file that contains the following:
SESSION_SECRET_KEY=your_32_char_hex_string_here
Start the container:
docker-compose up -d
{{% /code-tab-content %}} {{< /code-tabs-wrapper >}}
{{% product-name %}} stores application data in a SQLite database. To persist this data across container restarts:
Create a local directory:
mkdir -m 700 ./db
Mount the directory when running the container:
{{< code-tabs-wrapper >}} {{% code-tabs %}} Docker Docker Compose {{% /code-tabs %}}
{{% code-tab-content %}}
docker run --detach \
--name influxdb3-explorer \
--publish 8888:80 \
--volume $(pwd)/db:/db:rw \
influxdata/influxdb3-ui:{{% latest-patch %}}
{{% /code-tab-content %}}
{{% code-tab-content %}}
version: '3.8'
services:
explorer:
image: influxdata/influxdb3-ui:{{% latest-patch %}}
container_name: influxdb3-explorer
ports:
- "8888:80"
volumes:
- ./db:/db:rw
restart: unless-stopped
{{% /code-tab-content %}} {{< /code-tabs-wrapper >}}
[!Important] Without a mounted
./dbdirectory, application data is lost when the container is deleted.
Instead of configuring connections through the UI, you can pre-define connection settings using a config.json file. This is useful for:
Create a config.json file:
mkdir -p config
cat > config/config.json << 'EOF'
{
"DEFAULT_INFLUX_SERVER": "http://host.docker.internal:8181",
"DEFAULT_INFLUX_DATABASE": "mydb",
"DEFAULT_API_TOKEN": "your-token-here",
"DEFAULT_SERVER_NAME": "Local InfluxDB 3"
}
EOF
Customize the following properties for your InfluxDB 3 instance:
DEFAULT_INFLUX_SERVER: your InfluxDB 3 Core or Enterprise server URLDEFAULT_INFLUX_DATABASE: the name of your InfluxDB 3 Core or Enterprise databaseDEFAULT_API_TOKEN: your InfluxDB 3 Core or Enterprise authorization token with the necessary permissions to access your serverDEFAULT_SERVER_NAME: a display name (only used by Explorer) for your InfluxDB 3 Core or Enterprise server[!Note]
When to use
host.docker.internalIf your InfluxDB 3 instance is running in Docker (not the same container as Explorer), use
host.docker.internalas your server host to allow the Explorer container to connect to the InfluxDB container on the host--for example:txt"DEFAULT_INFLUX_SERVER": "http://host.docker.internal:8181"
- If both Explorer and InfluxDB are in the same Docker network, use the container name instead.
- If InfluxDB is running natively on your machine (not in Docker), use
localhost.For more information, see the Docker networking documentation.
Mount the configuration directory:
{{< code-tabs-wrapper >}} {{% code-tabs %}} Docker Docker Compose {{% /code-tabs %}}
{{% code-tab-content %}}
docker run --detach \
--name influxdb3-explorer \
--publish 8888:80 \
--volume $(pwd)/config:/app-root/config:ro \
influxdata/influxdb3-ui:{{% latest-patch %}}
{{% /code-tab-content %}}
{{% code-tab-content %}}
version: '3.8'
services:
explorer:
image: influxdata/influxdb3-ui:{{% latest-patch %}}
container_name: influxdb3-explorer
ports:
- "8888:80"
volumes:
- ./config:/app-root/config:ro
restart: unless-stopped
{{% /code-tab-content %}} {{< /code-tabs-wrapper >}}
To enable TLS/SSL for secure connections:
Create SSL directory and add certificate files:
mkdir -m 755 ./ssl
# Copy your certificate files to the ssl directory
cp /path/to/server.crt ./ssl/
cp /path/to/server.key ./ssl/
Required files:
server.crt or fullchain.pemserver.keyRun the container with SSL enabled:
{{< code-tabs-wrapper >}} {{% code-tabs %}} Docker Docker Compose {{% /code-tabs %}}
{{% code-tab-content %}}
docker run --detach \
--name influxdb3-explorer \
--publish 8888:443 \
--volume $(pwd)/ssl:/etc/nginx/ssl:ro \
influxdata/influxdb3-ui:{{% latest-patch %}}
{{% /code-tab-content %}}
{{% code-tab-content %}}
version: '3.8'
services:
explorer:
image: influxdata/influxdb3-ui:{{% latest-patch %}}
container_name: influxdb3-explorer
ports:
- "8888:443"
volumes:
- ./ssl:/etc/nginx/ssl:ro
restart: unless-stopped
{{% /code-tab-content %}} {{< /code-tabs-wrapper >}}
Access the Explorer UI at https://localhost:8888
[!Note] The nginx web server automatically detects and uses certificate files in the mounted path.
Use the following environment variables to configure TLS and certificate verification:
NODE_EXTRA_CA_CERTS - Path to custom CA certificate file inside container (recommended).
This option adds an intermediate or custom CA certificate to the Node.js trusted certificate store and is required when InfluxDB uses certificates signed by an internal or private CA.
-e NODE_EXTRA_CA_CERTS=/ca-certs/ca-bundle.crt[!Note] This is the native Node.js environment variable for custom CAs.
CA_CERT_PATH - Alternative to NODE_EXTRA_CA_CERTS (convenience alias)
-e CA_CERT_PATH=/ca-certs/ca-bundle.crt[!Note] Use either
NODE_EXTRA_CA_CERTSorCA_CERT_PATH; not both.CA_CERT_PATHaliasesNODE_EXTRA_CA_CERTS.
To configure Explorer to trust self-signed or custom CA certificates when connecting to InfluxDB:
Create a directory for CA certificates:
mkdir -p ./ca-certs
Copy your CA certificate to the directory:
cp /path/to/your-ca.pem ./ca-certs/
Mount the CA certificate directory and set the NODE_EXTRA_CA_CERTS environment variable:
{{< expand-wrapper >}} {{% expand "View example Docker configuration for self-signed certificates" %}}
{{< code-tabs-wrapper >}} {{% code-tabs %}} Docker Docker Compose {{% /code-tabs %}}
{{% code-tab-content %}} {{< code-callout "NODE_EXTRA_CA_CERTS" >}}
docker run --detach \
--name influxdb3-explorer \
--restart unless-stopped \
--publish 8888:443 \
--volume $(pwd)/db:/db:rw \
--volume $(pwd)/config:/app-root/config:ro \
--volume $(pwd)/ssl:/etc/nginx/ssl:ro \
--volume $(pwd)/ca-certs:/ca-certs:ro \
--env SESSION_SECRET_KEY=your-secure-secret-key-here \
--env NODE_EXTRA_CA_CERTS=/ca-certs/your-ca.pem \
influxdata/influxdb3-ui:{{% latest-patch %}} \
--mode=admin
{{< /code-callout >}} {{% /code-tab-content %}}
{{% code-tab-content %}} {{< code-callout "NODE_EXTRA_CA_CERTS" >}}
# docker-compose.yml
version: '3.8'
services:
explorer:
image: influxdata/influxdb3-ui:{{% latest-patch %}}
container_name: influxdb3-explorer
pull_policy: always
command: ["--mode=admin"]
ports:
- "8888:443"
volumes:
- ./db:/db:rw
- ./config:/app-root/config:ro
- ./ssl:/etc/nginx/ssl:ro
- ./ca-certs:/ca-certs:ro
environment:
SESSION_SECRET_KEY: ${SESSION_SECRET_KEY:-your-secure-secret-key-here}
NODE_EXTRA_CA_CERTS: /ca-certs/your-ca.pem
restart: unless-stopped
{{< /code-callout >}} {{% /code-tab-content %}} {{< /code-tabs-wrapper >}}
{{% /expand %}} {{< /expand-wrapper >}}
{{% product-name %}} supports two operational modes:
Set the mode using the --mode parameter:
{{< code-tabs-wrapper >}} {{% code-tabs %}} Docker Docker Compose {{% /code-tabs %}}
{{% code-tab-content %}}
# Query mode (default)
docker run --detach \
--name influxdb3-explorer \
--publish 8888:80 \
influxdata/influxdb3-ui:{{% latest-patch %}} \
--mode=query
# Admin mode
docker run --detach \
--name influxdb3-explorer \
--publish 8888:80 \
influxdata/influxdb3-ui:{{% latest-patch %}} \
--mode=admin
{{% /code-tab-content %}}
{{% code-tab-content %}}
version: '3.8'
services:
explorer:
image: influxdata/influxdb3-ui:{{% latest-patch %}}
container_name: influxdb3-explorer
# For query mode (default), omit the command
# For admin mode, add:
command: ["--mode=admin"]
ports:
- "8888:80"
restart: unless-stopped
{{% /code-tab-content %}} {{< /code-tabs-wrapper >}}
| Variable | Default | Description |
|---|---|---|
SESSION_SECRET_KEY | (random) | Secret key for session management. Set this in production to persist sessions across restarts. |
DATABASE_URL | /db/sqlite.db | Path to SQLite database inside container |
SSL_CERT_PATH | /etc/nginx/ssl/cert.pem | Path to SSL certificate file |
SSL_KEY_PATH | /etc/nginx/ssl/key.pem | Path to SSL private key file |
NODE_EXTRA_CA_CERTS | (none) | Path to custom CA certificate file (PEM format) for trusting self-signed or internal CA certificates |
CA_CERT_PATH | (none) | Alias for NODE_EXTRA_CA_CERTS |
[!Important] Always set
SESSION_SECRET_KEYin production to persist user sessions across container restarts. Enter the following command to generate a secure key:bashopenssl rand -hex 32
| Container Path | Purpose | Permissions | Required |
|---|---|---|---|
/db | SQLite database storage | 700 | No (but recommended) |
/app-root/config | Connection configuration | 755 | No |
/etc/nginx/ssl | TLS/SSL certificates | 755 | Only for HTTPS |
/ca-certs | Custom CA certificates | 755 | Only for self-signed certificates |
| Container Port | Protocol | Purpose | Common Host Mapping |
|---|---|---|---|
| 80 | HTTP | Web UI (unencrypted) | 8888 |
| 443 | HTTPS | Web UI (encrypted) | 8888 |
{{< code-tabs-wrapper >}} {{% code-tabs %}} Docker Docker Compose {{% /code-tabs %}}
{{% code-tab-content %}}
# Create required directories
mkdir -m 700 ./db
mkdir -m 755 ./config ./ssl
# Generate session secret
export SESSION_SECRET=$(openssl rand -hex 32)
# Create configuration
cat > config/config.json << 'EOF'
{
"DEFAULT_INFLUX_SERVER": "http://host.docker.internal:8181",
"DEFAULT_INFLUX_DATABASE": "production",
"DEFAULT_API_TOKEN": "your-production-token",
"DEFAULT_SERVER_NAME": "Production InfluxDB 3"
}
EOF
# Run Explorer with all features
docker run --detach \
--name influxdb3-explorer \
--pull always \
--publish 8888:443 \
--volume $(pwd)/db:/db:rw \
--volume $(pwd)/config:/app-root/config:ro \
--volume $(pwd)/ssl:/etc/nginx/ssl:ro \
--env SESSION_SECRET_KEY=$SESSION_SECRET \
--restart unless-stopped \
influxdata/influxdb3-ui:{{% latest-patch %}} \
--mode=admin
{{% /code-tab-content %}}
{{% code-tab-content %}}
# docker-compose.yml
version: '3.8'
services:
explorer:
image: influxdata/influxdb3-ui:{{% latest-patch %}}
container_name: influxdb3-explorer
pull_policy: always
command: ["--mode=admin"]
ports:
- "8888:443"
volumes:
- ./db:/db:rw
- ./config:/app-root/config:ro
- ./ssl:/etc/nginx/ssl:ro
environment:
SESSION_SECRET_KEY: ${SESSION_SECRET_KEY}
restart: unless-stopped
Create a .env file that contains the following:
SESSION_SECRET_KEY=your_32_char_hex_string_here
Start the container:
docker-compose up -d
{{% /code-tab-content %}} {{< /code-tabs-wrapper >}}
{{< code-tabs-wrapper >}} {{% code-tabs %}} Docker Docker Compose {{% /code-tabs %}}
{{% code-tab-content %}}
docker run --rm \
--name influxdb3-explorer \
--publish 8888:80 \
influxdata/influxdb3-ui:{{% latest-patch %}}
{{% /code-tab-content %}}
{{% code-tab-content %}}
# docker-compose.yml
version: '3.8'
services:
explorer:
image: influxdata/influxdb3-ui:{{% latest-patch %}}
container_name: influxdb3-explorer
ports:
- "8888:80"
{{% /code-tab-content %}} {{< /code-tabs-wrapper >}}