beekeeper-studio Docker & Self-Hosted Deployment

GitHub

Modern and easy to use SQL client for MySQL, Postgres, SQLite, SQL Server, and more. Linux, MacOS, and Windows.

23,364 stars TypeScript TypeScript 1 file ยท ~4,024 tokens #bigquery#cassandra#cockroachdb#database#electron#firebird#linux-app#mac-app
RAW Compose
1. Pull Image (DOCKERHUB) docker pull jaschweder/sybase
2. Docker Run (1-Click Launch) docker run -d --name beekeeper-studio -p 2638:2638 --restart always jaschweder/sybase
3. Podman Run podman run -d --name beekeeper-studio -p 2638:2638 --restart always jaschweder/sybase
4. Skopeo Inspect (Zero-Pull Manifest) skopeo inspect docker://docker.io/jaschweder/sybase:latest
5. ORAS Pull (OCI Artifact) oras pull jaschweder/sybase
6. Compose Deployment docker compose up -d
docker-compose.yml
Download .yml
version: '3'
volumes:
  mssql:
  mssqllatin:
  mysql:
  mysql8:
  mysql4.1:
  psql96:
  psql14:
  psql13:
  psql15_load_test_data:
  psql17:
  mariadb:
  cockroachdb:
  oracle18:
  cassandra:
  scylladb:
  bigquery:
  firebird:
  mongodb:
  anywhere:
  redis:
  greengage:
  greengage7:
  starrocks:
  surreal:

services:
  anywhere:
    image: jaschweder/sybase
    platform: linux/amd64
    ports:
      - 2638:2638

  mongodb:
    image: mongo
    platform: linux/amd64
    environment:
      MONGO_INITDB_ROOT_USERNAME: beekeeper
      MONGO_INITDB_ROOT_PASSWORD: example
      MONGO_INITDB_DATABASE: sakila
    volumes:
      - ./dev/docker_mongodb_init:/docker-entrypoint-initdb.d
    ports:
      - 27017:27017

  oracle18:
    image: gvenzl/oracle-xe:18
    platform: linux/amd64
    environment:
      ORACLE_PASSWORD: example
      ORACLE_DATABASE: sakila
      APP_USER: beekeeper
      APP_USER_PASSWORD: example
    volumes:
      - oracle18:/opt/oracle/oradata
      - ./dev/docker_oracle_init:/docker-entrypoint-initdb.d
    ports:
      - 1521:1521

  psql15-load-test:
    image: postgres:15
    platform: linux/amd64
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: example
      POSTGRES_DB: load_test_db
    volumes:
      - psql15_load_test_data:/var/lib/postgresql/data
      - ./dev/docker_psql_load_test_init:/docker-entrypoint-initdb.d
    ports:
      - 5435:5432
    shm_size: 2gb
    command: postgres -c shared_preload_libraries=pg_stat_statements -c max_connections=1000 -c shared_buffers=512MB -c work_mem=16MB

  psql15:
    image: postgres:15
    platform: linux/amd64
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: example
      POSTGRES_DB: saklia
    volumes:
      - psql13:/var/lib/postgresql/data
      - ./dev/docker_psql_init:/docker-entrypoint-initdb.d
    ports:
      - 5434:5432

  psql17:
    image: postgres:17
    platform: linux/amd64
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: example
      POSTGRES_DB: saklia
    volumes:
      - psql17:/var/lib/postgresql/data
      - ./dev/docker_psql_init:/docker-entrypoint-initdb.d
    ports:
      - 5437:5432

  psql14:
    image: postgres:14
    platform: linux/amd64
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: example
      POSTGRES_DB: saklia
    volumes:
      - psql14:/var/lib/postgresql/data
      - ./dev/docker_psql_init:/docker-entrypoint-initdb.d
    ports:
      - 5436:5432
  psql13:
    image: postgres:13
    platform: linux/amd64
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: example
      POSTGRES_DB: saklia
    volumes:
      - psql13:/var/lib/postgresql/data
      - ./dev/docker_psql_init:/docker-entrypoint-initdb.d
    ports:
      - 5433:5432
  trino:
    image: trinodb/trino:latest
    platform: linux/amd64
    ports:
      - "8090:8080"
    volumes:
      - ./dev/docker_trino/catalog:/etc/trino/catalog
    depends_on:
      - psql
      - mysql8
  psql:
    image: postgres:9.6
    platform: linux/amd64
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: example
      POSTGRES_DB: saklia
    volumes:
      - psql96:/var/lib/postgresql/data
      - ./dev/docker_psql_init:/docker-entrypoint-initdb.d
    ports:
      - 5432:5432

  # Greengage DB 6. https://hub.docker.com/r/greengagedb/ggdb6_ubuntu/tags . Demo listens on 6000.
  greengage:
    image: greengagedb/ggdb6_ubuntu:6.29.2
    platform: linux/amd64
    sysctls:
      kernel.sem: "500 1024000 200 4096"
    ports:
      - 5438:6000
    volumes:
      - greengage:/tmp/greengage_data
      - ./dev/docker_greengage/init-and-run.sh:/init-and-run.sh:ro
    command: ["bash", "/init-and-run.sh"]

  # Greengage DB 7. https://hub.docker.com/r/greengagedb/ggdb7_ubuntu/tags . Demo listens on 7000.
  greengage7:
    image: greengagedb/ggdb7_ubuntu:7.4.1
    platform: linux/amd64
    sysctls:
      kernel.sem: "500 1024000 200 4096"
    ports:
      - 5439:7000
    volumes:
      - greengage7:/tmp/greengage_data
      - ./dev/docker_greengage/init-and-run.sh:/init-and-run.sh:ro
    command: ["bash", "/init-and-run.sh"]

  mariadb:
    image: mariadb
    platform: linux/amd64
    environment:
      MYSQL_ROOT_PASSWORD: example
      MYSQL_DATABASE: test
    ports:
      - 3307:3306
    volumes:
      - mariadb:/var/lib/mysql
      - ./dev/docker_mysql_init:/docker-entrypoint-initdb.d
  mysql8:
    image: mysql:8.0.21
    platform: linux/amd64
    command: --default-authentication-plugin=mysql_native_password
    environment:
      MYSQL_ROOT_PASSWORD: example
      MYSQL_DATABASE: test
    ports:
      - 3308:3306
    volumes:
      - mysql8:/var/lib/mysql
      - ./dev/docker_mysql_init:/docker-entrypoint-initdb.d
  mysql:
    image: mysql:5.7.22
    platform: linux/amd64
    command: --default-authentication-plugin=mysql_native_password
    environment:
      MYSQL_ROOT_PASSWORD: example
      MYSQL_DATABASE: test
    ports:
      - 3306:3306
    volumes:
      - mysql:/var/lib/mysql
      - ./dev/docker_mysql_init:/docker-entrypoint-initdb.d
  mysql4.1:
    image: vettadock/mysql-old:4.1
    platform: linux/amd64
    ports:
      - 3309:3306
  sqlserver:
    image: "mcr.microsoft.com/mssql/server:2017-latest-ubuntu"
    platform: linux/amd64
    volumes:
      - mssql:/var/opt/mssql/data
      - ./dev/docker_sqlserver:/docker_init
    environment:
      ACCEPT_EULA: "Y"
      MSSSQL_PID: "Express"
      SA_PASSWORD: "Example@1"
    ports:
      - 1433:1433
    command: sh -c ' chmod +x /docker_init/entrypoint.sh; /docker_init/entrypoint.sh & /opt/mssql/bin/sqlservr;'
  sqlserverlatin:
    image: 'mcr.microsoft.com/mssql/server:2017-latest-ubuntu'
    platform: linux/amd64
    volumes:
      - mssqllatin:/var/opt/mssql/data
      - ./dev/docker_sqlserver:/docker_init
    environment:
      ACCEPT_EULA: "Y"
      SA_PASSWORD: Example@1"
      MSSQL_COLLATION: Latin1_General_CS_AS
      MSSQL_PID: "Express"
    ports:
      - 1434:1433
    command: sh -c ' chmod +x /docker_init/entrypoint.sh; /docker_init/entrypoint.sh & /opt/mssql/bin/sqlservr;'
  cockroachdb:
    image: cockroachdb/cockroach:v22.1.1
    platform: linux/amd64
    volumes:
      - cockroachdb:/cockroach/cockroach-data
    ports:
      - 26257:26257
    command: start-single-node --insecure
  cassandra:
    image: cassandra:latest
    platform: linux/amd64
    entrypoint: [ "/docker-entrypoint.initdb.d/entry.sh" ]
    ports:
      - 9042:9042
    volumes:
      - cassandra:/var/lib/cassandra
      - ./dev/docker_cassandra_init:/docker-entrypoint.initdb.d
  # use keyspace; describe tables; # get all the tables for a specific keyspace
  # select * from system_schema.keyspaces; # gets all keyspaces
  # https://www.folkstalk.com/2022/09/get-all-keyspaces-in-cassandra-with-code-examples.html
  # Create keyspace https://www.tutorialspoint.com/cassandra/cassandra_create_keyspace.htm
  scylladb:
    image: scylladb/scylla:2025.1.4
    platform: linux/amd64
    entrypoint: [ "/docker-entrypoint.initdb.d/entry.sh" ]
    command: --reactor-backend epoll --smp 1 --memory 1G --overprovisioned 1 --api-address 0.0.0.0
    ports:
      - 9043:9042  # Different host port to run alongside Cassandra
    volumes:
      - scylladb:/var/lib/scylla
      - ./dev/docker_scylladb_init:/docker-entrypoint.initdb.d
    healthcheck:
      test: ["CMD-SHELL", "cqlsh -e 'DESCRIBE KEYSPACES'"]
      interval: 10s
      timeout: 5s
      retries: 10
  bigquery:
    image: ghcr.io/goccy/bigquery-emulator:latest
    platform: linux/amd64
    volumes:
      - ./dev/docker_bigquery:/data
      - ./dev/docker_bigquery:/docker_init
    ports:
      - 9050:9050
      - 9060:9060
    entrypoint: sh -c 'chmod +x /docker_init/data.sh; /docker_init/data.sh'
  firebird:
    image: jacobalberty/firebird:v4.0.1
    platform: linux/amd64
    volumes:
      - ./dev/docker_firebird:/docker_init
    ports:
      - 3050:3050
    environment:
      - ISC_PASSWORD=masterkey
      - EnableLegacyClientAuth=true
    command: sh -c 'chmod +x /docker_init/entrypoint.sh; /docker_init/entrypoint.sh & /usr/local/firebird/docker-entrypoint.sh firebird;'
  libsql:
    image: ghcr.io/tursodatabase/libsql-server:latest
    platform: linux/amd64
    ports:
      - 8081:8080
      - 5001:5001
      # environment:
      #   - SQLD_NODE=primary
      # volumes:
      #   - ./dev/docker_libsql:/var/lib/sqld
  clickhouse:
    image: clickhouse/clickhouse-server
    platform: linux/amd64
    ports:
      - 8123:8123
    environment:
      - CLICKHOUSE_USER=username
      - CLICKHOUSE_PASSWORD=password
      - CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT=1
  redis:
    image: redis:latest
    ports:
      - 6379:6379
    volumes:
      - redis:/data
      - ./dev/docker_redis:/docker_init
    command: sh -c 'redis-server & sleep 3 && /docker_init/data.sh && wait'

  clickhouse25:
    image: clickhouse/clickhouse-server:25.6.1
    ports:
      - 8124:8123
    environment:
      - CLICKHOUSE_USER=username
      - CLICKHOUSE_PASSWORD=password
      - CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT=1

  surrealdb:
    image: surrealdb/surrealdb:latest
    user: "0:0"
    command: start --log trace --user root --pass root --allow-all rocksdb:/mydata/surreal.db
    ports:
      - 8000:8000
    volumes:
      - surreal:/mydata

  surrealdb-seed:
    image: surrealdb/surrealdb:latest
    depends_on:
      - surrealdb
    command: import --endpoint http://surrealdb:8000 --user root --pass root --ns test --db test /seed.surql
    volumes:
      - ./dev/docker_surrealdb_init/seed.surql:/seed.surql:ro

  dynamodb-local:
    image: amazon/dynamodb-local:latest
    platform: linux/amd64
    ports:
      - 8001:8000
    command: "-jar DynamoDBLocal.jar -sharedDb -inMemory"

  # StarRocks (FE + BE in one container). MySQL protocol on 9030, FE http on 8030.
  # The command layers the quick start sample data loader on top of the image's
  # own ./entrypoint.sh; data is loaded once and persisted in the starrocks volume.
  # See https://docs.starrocks.io/docs/quick_start/shared-nothing/
  starrocks:
    image: starrocks/allin1-ubuntu
    ports:
      - 9030:9030
      - 8030:8030
      - 8040:8040
    volumes:
      - starrocks:/data/deploy/starrocks
      - ./dev/docker_starrocks/init.sh:/init.sh:ro
    command: ["bash", "/init.sh"]