NocoDB is an open-source no-code platform that converts any SQL database into a smart spreadsheet interface. Users can collaborate, filter and visualize data without writing queries. It supports REST and GraphQL APIs, automation and integration with third-party tools. Great for managing projects, CRM data, or inventory without deep technical knowledge. A strong alternative to paid platforms like Airtable.

Setup

docker-compose.yaml (mysql)

version: '3'

networks:
  docker_net:
    external: true

volumes:
  db_data: {}
  nc_data: {}

services:
  nocodb:
    image: nocodb/nocodb:latest
    container_name: nocodb
    restart: unless-stopped
    depends_on:
      root_db:
        condition: service_healthy
    environment:
      NC_DB: "mysql2://root_db:3306?u=noco&p=$PASSWORD&d=root_db"
    ports:
      - 8080:8080
    volumes:
      - nc_data:/usr/app/data
    networks:
      - docker_net

  root_db:
    image: mysql:8.3.0
    container_name: nocodb_mysql
    restart: unless-stopped
    environment:
      MYSQL_DATABASE: root_db
      MYSQL_PASSWORD: $PASSWORD
      MYSQL_ROOT_PASSWORD: $ROOT_PASSWORD
      MYSQL_USER: noco
    healthcheck:
      retries: 10
      test:
        - CMD
        - mysqladmin
        - ping
        - "-h"
        - localhost
      timeout: 20s
    volumes:
      - db_data:/var/lib/mysql
    networks:
      - docker_net

docker-compose.yaml (pg)

version: '3'

networks:
  docker_net:
    external: true

volumes:
  db_data: {}
  nc_data: {}

services:
  nocodb:
    image: nocodb/nocodb:latest
    container_name: nocodb
    restart: unless-stopped
    depends_on:
      root_db:
        condition: service_healthy
    environment:
      NC_DB: "pg://root_db:5432?u=postgres&p=$PASSWORD&d=root_db"
    ports:
      - 8080:8080
    volumes:
      - nc_data:/usr/app/data
    networks:
      - docker_net

  root_db:
    image: postgres
    container_name: nocodb_pg
    restart: unless-stopped
    environment:
      POSTGRES_DB: root_db
      POSTGRES_PASSWORD: $PASSWORD
      POSTGRES_USER: postgres
    healthcheck:
      interval: 10s
      retries: 10
      test: "pg_isready -U \"$$POSTGRES_USER\" -d \"$$POSTGRES_DB\""
      timeout: 2s
    volumes:
      - db_data:/var/lib/postgresql/data
    networks:
      - docker_net

Sources