docker.recipes

Odoo ERP

intermediate

Open-source ERP and business applications.

Overview

Odoo is a comprehensive open-source Enterprise Resource Planning (ERP) suite that began as TinyERP in 2005 and has evolved into one of the world's most popular business management platforms. It offers a modular approach to business applications, covering everything from CRM and sales to inventory management, accounting, manufacturing, and e-commerce, all within a unified web-based interface that can scale from small startups to large enterprises. This Docker configuration pairs Odoo 17 with PostgreSQL 16, creating a robust business management platform where PostgreSQL's ACID compliance and advanced transaction support ensure data integrity across all business operations. PostgreSQL's excellent JSON support complements Odoo's flexible data models, while its sophisticated query capabilities handle complex business reporting and analytics that ERP systems demand. The combination leverages PostgreSQL's reliability for mission-critical business data while Odoo provides the comprehensive application layer. This stack is ideal for businesses wanting to deploy a complete ERP solution without vendor lock-in, developers building custom business applications on Odoo's framework, and organizations requiring integrated business processes with strong data consistency. The open-source nature of both components makes this particularly valuable for companies wanting full control over their business systems while benefiting from enterprise-grade database performance and ERP functionality.

Key Features

  • Modular ERP architecture with 30+ official apps including CRM, Sales, Inventory, Accounting, Manufacturing, and Website Builder
  • Multi-company and multi-currency support with advanced financial consolidation and reporting
  • Integrated e-commerce platform with product catalog management, payment processing, and inventory synchronization
  • Advanced PostgreSQL JSON/JSONB support for flexible custom fields and metadata storage in business records
  • Built-in workflow engine and approval processes for purchase orders, expenses, and document management
  • Comprehensive reporting with PostgreSQL's window functions enabling complex business analytics and KPI dashboards
  • Real-time inventory tracking with barcode scanning, lot/serial number management, and automated reordering
  • Project management with timesheet integration, task dependencies, and resource planning

Common Use Cases

  • 1Small to medium businesses implementing their first integrated ERP system to replace spreadsheets and disconnected tools
  • 2E-commerce companies needing unified inventory, order management, and accounting across multiple sales channels
  • 3Manufacturing companies requiring production planning, bill of materials management, and quality control tracking
  • 4Service businesses managing projects, timesheets, invoicing, and customer relationships in one platform
  • 5Retail operations needing point-of-sale integration with inventory management and customer loyalty programs
  • 6Growing startups requiring scalable business processes and financial controls as they expand
  • 7Organizations with complex approval workflows for purchasing, expenses, and document management

Prerequisites

  • Minimum 4GB RAM recommended for production use (Odoo is memory-intensive with multiple modules)
  • Port 8069 available for Odoo web interface access
  • Basic understanding of ERP concepts like chart of accounts, inventory management, and business workflows
  • PostgreSQL knowledge helpful for database maintenance, backups, and performance tuning
  • Understanding of Odoo's module system if planning to install custom addons or community modules
  • SSL certificate and reverse proxy setup recommended for production deployments with sensitive business data

For development & testing. Review security settings, change default credentials, and test thoroughly before production use. See Terms

docker-compose.yml

docker-compose.yml
1services:
2 odoo:
3 image: odoo:17
4 container_name: odoo
5 restart: unless-stopped
6 environment:
7 HOST: postgres
8 USER: ${DB_USER}
9 PASSWORD: ${DB_PASSWORD}
10 volumes:
11 - odoo_data:/var/lib/odoo
12 - odoo_addons:/mnt/extra-addons
13 ports:
14 - "8069:8069"
15 depends_on:
16 - postgres
17 networks:
18 - odoo
19
20 postgres:
21 image: postgres:16-alpine
22 container_name: odoo-postgres
23 environment:
24 POSTGRES_USER: ${DB_USER}
25 POSTGRES_PASSWORD: ${DB_PASSWORD}
26 POSTGRES_DB: postgres
27 volumes:
28 - postgres_data:/var/lib/postgresql/data
29 networks:
30 - odoo
31
32volumes:
33 odoo_data:
34 odoo_addons:
35 postgres_data:
36
37networks:
38 odoo:
39 driver: bridge

.env Template

.env
1DB_USER=odoo
2DB_PASSWORD=changeme

Usage Notes

  1. 1Docs: https://www.odoo.com/documentation/
  2. 2Access at http://localhost:8069 - create database on first visit
  3. 3Master password in first setup, then create company database
  4. 4Install apps: CRM, Sales, Inventory, Accounting, eCommerce, etc.
  5. 5Community edition free, Enterprise requires license
  6. 6Custom modules in /mnt/extra-addons, restart to load

Individual Services(2 services)

Copy individual services to mix and match with your existing compose files.

odoo
odoo:
  image: odoo:17
  container_name: odoo
  restart: unless-stopped
  environment:
    HOST: postgres
    USER: ${DB_USER}
    PASSWORD: ${DB_PASSWORD}
  volumes:
    - odoo_data:/var/lib/odoo
    - odoo_addons:/mnt/extra-addons
  ports:
    - "8069:8069"
  depends_on:
    - postgres
  networks:
    - odoo
postgres
postgres:
  image: postgres:16-alpine
  container_name: odoo-postgres
  environment:
    POSTGRES_USER: ${DB_USER}
    POSTGRES_PASSWORD: ${DB_PASSWORD}
    POSTGRES_DB: postgres
  volumes:
    - postgres_data:/var/lib/postgresql/data
  networks:
    - odoo

Quick Start

terminal
1# 1. Create the compose file
2cat > docker-compose.yml << 'EOF'
3services:
4 odoo:
5 image: odoo:17
6 container_name: odoo
7 restart: unless-stopped
8 environment:
9 HOST: postgres
10 USER: ${DB_USER}
11 PASSWORD: ${DB_PASSWORD}
12 volumes:
13 - odoo_data:/var/lib/odoo
14 - odoo_addons:/mnt/extra-addons
15 ports:
16 - "8069:8069"
17 depends_on:
18 - postgres
19 networks:
20 - odoo
21
22 postgres:
23 image: postgres:16-alpine
24 container_name: odoo-postgres
25 environment:
26 POSTGRES_USER: ${DB_USER}
27 POSTGRES_PASSWORD: ${DB_PASSWORD}
28 POSTGRES_DB: postgres
29 volumes:
30 - postgres_data:/var/lib/postgresql/data
31 networks:
32 - odoo
33
34volumes:
35 odoo_data:
36 odoo_addons:
37 postgres_data:
38
39networks:
40 odoo:
41 driver: bridge
42EOF
43
44# 2. Create the .env file
45cat > .env << 'EOF'
46DB_USER=odoo
47DB_PASSWORD=changeme
48EOF
49
50# 3. Start the services
51docker compose up -d
52
53# 4. View logs
54docker compose logs -f

One-Liner

Run this command to download and set up the recipe in one step:

terminal
1curl -fsSL https://docker.recipes/api/recipes/odoo/run | bash

Troubleshooting

  • Database creation fails with 'connection refused': Ensure PostgreSQL container is fully started before Odoo attempts connection, add healthcheck or delay
  • Odoo web interface shows 'Internal Server Error': Check container logs for Python tracebacks, often related to missing database or incorrect environment variables
  • Custom addons not loading: Verify addon files are properly mounted in /mnt/extra-addons volume and restart Odoo container after adding modules
  • Performance issues with large datasets: Tune PostgreSQL memory settings in postgresql.conf and consider database indexing for custom fields
  • Master password prompt keeps appearing: Set ODOO_MASTER_PASSWORD environment variable or configure admin_passwd in odoo.conf file
  • Module installation fails: Check addon dependencies and ensure all required Python packages are available in the Odoo container

Community Notes

Loading...
Loading notes...

Download Recipe Kit

Get all files in a ready-to-deploy package

Includes docker-compose.yml, .env template, README, and license

Ad Space