Odoo Enterprise vs Community Docker — Setup Guide
You want to run Odoo in Docker. The first decision: Community or Enterprise? The good news is that from a Docker perspective, 95% of the setup is identical. Same PostgreSQL. Same Nginx. Same Docker Compose structure. The only thing that changes is the Odoo image itself and where you get it.
Community vs Enterprise — What's Different in Docker?
Here is the short version:
| Community | Enterprise | |
|---|---|---|
| Docker image source | odoo:18.0 on Docker Hub (public, free) | Odoo’s private registry or custom-built image |
| License | LGPL-3.0 — use it however you want | Per-user subscription from Odoo S.A. |
| Base code | Full Odoo core | Same core + enterprise addons directory |
| PostgreSQL | Standard setup | Identical setup |
| Nginx / reverse proxy | Standard setup | Identical setup |
| Extra dependencies | None | Some features need additional Python packages |
| Docker Compose structure | Standard | Standard (+ enterprise addons volume) |
The Community image is freely available on Docker Hub. Anyone can pull it, run it, and deploy it to production. No credentials, no subscription, no approval process.
The Enterprise image is not on Docker Hub. You need an active Odoo Enterprise subscription to access it. There are two ways to get it: pull from Odoo's private registry, or build your own image with the enterprise addons baked in.
Everything else — PostgreSQL configuration, Nginx routing, volume mounts, backup strategies, environment variables — is the same for both editions. If you already have a working Community Docker setup, upgrading to Enterprise is a 15-minute job.
Running Odoo Community with Docker
This is the simplest path. The official Odoo image on Docker Hub includes everything you need.
docker-compose.yml — Community Edition
version: "3.8"
services:
odoo:
image: odoo:18.0
container_name: odoo-community
depends_on:
- db
ports:
- "8069:8069"
- "8072:8072"
volumes:
- odoo-data:/var/lib/odoo
- ./config/odoo.conf:/etc/odoo/odoo.conf:ro
- ./custom-addons:/mnt/extra-addons
environment:
- HOST=db
- PORT=5432
- USER=odoo
- PASSWORD=odoo_db_password
restart: unless-stopped
db:
image: postgres:16-alpine
container_name: odoo-db
environment:
- POSTGRES_DB=postgres
- POSTGRES_USER=odoo
- POSTGRES_PASSWORD=odoo_db_password
- PGDATA=/var/lib/postgresql/data/pgdata
volumes:
- db-data:/var/lib/postgresql/data/pgdata
restart: unless-stopped
volumes:
odoo-data:
db-data:Minimal odoo.conf
[options]
addons_path = /mnt/extra-addons
data_dir = /var/lib/odoo
admin_passwd = your_master_password_here
db_host = db
db_port = 5432
db_user = odoo
db_password = odoo_db_password
proxy_mode = True
workers = 4
max_cron_threads = 2
limit_memory_hard = 2684354560
limit_memory_soft = 2147483648
limit_time_cpu = 600
limit_time_real = 1200Start it:
docker compose up -dOpen http://localhost:8069 and you are running Odoo Community. No license key, no registration, no trial period. It is LGPL software — use it freely.
Generate this automatically. The OEC.sh Docker Compose Generator creates production-ready configs for Community and Enterprise, tuned to your server specs.
Getting the Enterprise Image
Enterprise is not on Docker Hub. You have two options.
Option A: Odoo's Private Docker Registry
Odoo S.A. provides a private Docker registry for Enterprise subscribers. You will need your Odoo subscription credentials (the ones you use on odoo.com).
# Log in to Odoo's private registry
docker login https://nightly.odoo.com
# Pull the Enterprise image
docker pull nightly.odoo.com/odoo-enterprise:18.0Your subscription portal will have the exact registry URL and instructions. The image is functionally identical to the Community image but includes the enterprise addons pre-installed.
Option B: Build a Custom Image
If you prefer to control what goes into your image — or if your subscription gives you source access but not registry access — you can build it yourself. This is the more common approach in practice because it lets you include your own custom modules in the same image.
Building a Custom Enterprise Docker Image
This is the approach most production deployments use. You start from the official Community image and layer the Enterprise addons on top.
Prerequisites
- •An active Odoo Enterprise subscription
- •Access to the Enterprise source code (via Odoo's GitHub or download portal)
- •The enterprise addons directory downloaded locally
Dockerfile
FROM odoo:18.0
USER root
# Install additional Python dependencies needed by Enterprise modules
# OCR/invoice extraction, PDF processing, etc.
RUN pip3 install --no-cache-dir \
python-stdnum \
vobject \
xlrd \
num2words \
phonenumbers \
python-barcode \
qrcode \
cryptography
# Copy Enterprise addons into the image
COPY ./enterprise /mnt/enterprise-addons
# Copy any custom addons
COPY ./custom-addons /mnt/custom-addons
# Update addons_path in the default config
RUN sed -i 's|addons_path = .*|addons_path = /mnt/enterprise-addons,/mnt/custom-addons,/mnt/extra-addons|' /etc/odoo/odoo.conf
# Fix permissions
RUN chown -R odoo:odoo /mnt/enterprise-addons /mnt/custom-addons
USER odooBuild and tag
# Clone or download the enterprise addons to ./enterprise/
# (requires Odoo subscription credentials)
git clone https://github.com/odoo/enterprise.git --branch 18.0 --depth 1
# Build the image
docker build -t odoo-enterprise:18.0 .
# Verify it works
docker run --rm odoo-enterprise:18.0 odoo --versionThe resulting image is about 1.5–2 GB depending on how many extra Python packages you install. Tag it with your own registry prefix if you are pushing to a private registry:
docker tag odoo-enterprise:18.0 registry.yourcompany.com/odoo-enterprise:18.0
docker push registry.yourcompany.com/odoo-enterprise:18.0Docker Compose for Enterprise
Here is a full production Docker Compose setup for Enterprise. The key differences from Community are highlighted in comments.
version: "3.8"
services:
odoo:
# Use your custom-built Enterprise image instead of the Docker Hub image
image: odoo-enterprise:18.0
# Or if using Odoo's private registry:
# image: nightly.odoo.com/odoo-enterprise:18.0
container_name: odoo-enterprise
depends_on:
- db
ports:
- "8069:8069"
- "8072:8072"
volumes:
- odoo-data:/var/lib/odoo
- ./config/odoo.conf:/etc/odoo/odoo.conf:ro
# Mount enterprise addons if NOT baked into image
# - ./enterprise:/mnt/enterprise-addons:ro
- ./custom-addons:/mnt/custom-addons
environment:
- HOST=db
- PORT=5432
- USER=odoo
- PASSWORD=odoo_db_password
deploy:
resources:
limits:
memory: 4G
cpus: "2.0"
reservations:
memory: 2G
cpus: "1.0"
restart: unless-stopped
db:
image: postgres:16-alpine
container_name: odoo-db
environment:
- POSTGRES_DB=postgres
- POSTGRES_USER=odoo
- POSTGRES_PASSWORD=odoo_db_password
- PGDATA=/var/lib/postgresql/data/pgdata
volumes:
- db-data:/var/lib/postgresql/data/pgdata
- ./postgres/postgresql.conf:/etc/postgresql/postgresql.conf:ro
command: postgres -c config_file=/etc/postgresql/postgresql.conf
deploy:
resources:
limits:
memory: 2G
cpus: "1.0"
restart: unless-stopped
volumes:
odoo-data:
db-data:Enterprise odoo.conf
[options]
; Enterprise addons path comes FIRST so enterprise modules override community
addons_path = /mnt/enterprise-addons,/mnt/custom-addons,/mnt/extra-addons
data_dir = /var/lib/odoo
admin_passwd = strong_master_password_here
db_host = db
db_port = 5432
db_user = odoo
db_password = odoo_db_password
proxy_mode = True
workers = 4
max_cron_threads = 2
; Enterprise tends to use more memory due to heavier modules
limit_memory_hard = 4294967296
limit_memory_soft = 3221225472
limit_time_cpu = 600
limit_time_real = 1200
; Longpolling for live chat, discuss, etc.
gevent_port = 8072The critical detail: the enterprise addons directory must come first in addons_path. Enterprise modules override their Community counterparts by name. If community addons come first, you will get the community version of modules that exist in both.
Enterprise Features That Need Extra Docker Config
Most Enterprise modules work out of the box. A few need additional configuration.
OCR and Invoice Extraction (Documents/Accounting)
Enterprise's AI-powered invoice digitization calls Odoo's IAP (In-App Purchase) servers. No extra Docker config needed for the API calls themselves, but the image processing libraries must be present:
RUN pip3 install --no-cache-dir \
pdf2image \
pdfminer.six \
PillowYou will also need an IAP credit balance on your Odoo subscription.
Studio (Custom App Builder)
Studio needs the enterprise addons in addons_path and the web_studio module installed. No extra Docker configuration. Just make sure your addons_path includes the enterprise directory and install the module from the Apps menu.
VoIP
The VoIP module requires WebSocket support. Ensure your Nginx reverse proxy passes WebSocket connections:
location /websocket {
proxy_pass http://odoo-longpolling;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}Sign (Electronic Signatures)
Works out of the box. Uses Odoo's servers for signature verification. No additional Docker dependencies.
IoT Box
If you are connecting physical hardware (printers, scales, payment terminals) via IoT Box, the Docker container needs USB passthrough. This only applies if you are running the IoT Box software inside Docker rather than on a dedicated Raspberry Pi:
services:
odoo:
devices:
- /dev/bus/usb:/dev/bus/usb
privileged: true # Required for USB accessIn practice, most deployments run the IoT Box on a separate device and connect it to the Odoo server over the network.
Switching from Community to Enterprise
Already running Community and want to upgrade? Your data is fully preserved. Odoo Enterprise is the same database schema with additional modules available.
Step-by-step
1. Stop your running containers:
docker compose down2. Back up everything (do not skip this):
# Database backup
docker exec odoo-db pg_dump -U odoo your_database > backup_$(date +%Y%m%d).sql
# Filestore backup
docker cp odoo-community:/var/lib/odoo ./filestore-backup/3. Get the Enterprise addons (requires subscription):
git clone https://github.com/odoo/enterprise.git --branch 18.0 --depth 14. Build or pull the Enterprise image (see sections above).
5. Update docker-compose.yml to use the Enterprise image:
services:
odoo:
image: odoo-enterprise:18.0 # Was: odoo:18.06. Update odoo.conf to include enterprise addons path:
addons_path = /mnt/enterprise-addons,/mnt/custom-addons,/mnt/extra-addons7. Start containers and update the module list:
docker compose up -d
# Update module list to discover enterprise modules
docker exec odoo-enterprise odoo -d your_database --update=base --stop-after-init8. Activate your Enterprise license via Settings > General Settings > Odoo Enterprise Subscription.
9. Install Enterprise modules you need from the Apps menu.
Your existing data, users, configurations, and customizations are preserved. The upgrade adds new modules to the catalog — it does not remove or modify your existing ones.
Licensing Considerations
This is where people get confused, so here are the specifics.
Community Edition (LGPL-3.0)
- •Free to use, modify, and distribute
- •No user limits
- •No container limits
- •No registration required
- •You can run 100 containers across 50 servers and owe nothing
- •Commercial use is fully permitted
Enterprise Edition
- •Licensed per user — not per container, not per server, not per database
- •Running 5 containers behind a load balancer counts as one deployment — you need licenses for your users, not your infrastructure
- •Development and staging instances are covered under the same license. You do not need separate licenses for non-production environments.
- •The license is tied to the number of named users who access the system
- •Minimum 5 users (pricing varies by region — check odoo.com/pricing)
- •Self-hosting does not change the per-user price, but you avoid Odoo.sh hosting fees
What This Means for Docker
You can:
- •Run as many containers as you want (dev, staging, production)
- •Pull the image on any machine
- •Build and cache images in your pipeline
- •Share the image within your organization
You cannot:
- •Distribute the Enterprise source code or image outside your organization
- •Run Enterprise without an active subscription
- •Use Enterprise modules in a Community installation without a license
Cost Comparison
| Deployment Model | Monthly Server Cost | Odoo License | Total |
|---|---|---|---|
| Community, self-hosted (VPS) | $5–20/mo | Free (LGPL) | $5–20/mo |
| Enterprise, self-hosted (VPS) | $5–20/mo | ~$24–40/user/mo | $5–20/mo + license |
| Community on OEC.sh | Free tier available | Free (LGPL) | $0–19/mo |
| Enterprise on OEC.sh | From $19/mo | ~$24–40/user/mo | From $19/mo + license |
| Odoo.sh (Odoo’s own hosting) | Included in pricing | Bundled | From ~$100/mo |
The infrastructure cost is roughly the same whether you run Community or Enterprise — both need the same PostgreSQL, the same server resources, the same Docker setup. The difference is entirely in the Odoo license.
Self-hosting Enterprise through Docker gives you the same software as Odoo.sh at a fraction of the cost. You trade managed convenience for infrastructure control. OEC.sh sits in the middle: managed deployment without the Odoo.sh markup.
Size your server. The Server Requirements Calculator estimates CPU, RAM, and storage based on your user count and module selection.
Deploy Both Editions on OEC.sh
Setting up Docker, PostgreSQL, Nginx, SSL, and keeping it all updated is straightforward — but it is also time you could spend on your actual business.
OEC.sh handles the infrastructure:
- •Community or Enterprise — choose your edition at deployment time
- •Switch editions without rebuilding. Your data and configuration carry over.
- •Multi-cloud — deploy on DigitalOcean, AWS, Hetzner, or any provider. No vendor lock-in.
- •Docker-based under the hood — same architecture as this guide, but managed for you
- •Free tier for Community Edition
If you want to run Docker yourself, use this guide. If you want the same result without managing containers, check the pricing or try the Docker Compose Generator to see what OEC.sh would set up for you.
Deploy Odoo Enterprise or Community
OEC.sh manages Docker, PostgreSQL, Nginx, and SSL for both editions — on any cloud provider, with zero vendor lock-in.
- Free tier available
- No credit card required
- Switch editions anytime
Frequently Asked Questions
Can I run Odoo Enterprise without Docker?
Yes. Enterprise works with any deployment method: bare metal, VPS with systemd, Kubernetes, or Docker. Docker is just the easiest way to maintain consistent environments. The enterprise addons are Python modules — they work anywhere Python runs.
Is the Enterprise Docker image different from Community?
The base image is the same Debian-based environment with the same Odoo core. Enterprise adds an additional addons directory containing the enterprise-only modules. Think of it as Community + an extra folder. The PostgreSQL schema, configuration files, and deployment architecture are identical.
Can I test Enterprise for free?
Odoo offers a free trial on odoo.com. For self-hosted testing, you can request trial access from your Odoo salesperson. There is no publicly available Enterprise Docker image you can pull without credentials.
How do I add Enterprise modules to Community?
You cannot run Enterprise modules without an Enterprise license. The code requires license validation. If you install the enterprise addons directory without activating a subscription, modules will not load. This is a license enforcement mechanism, not a technical limitation.
Do I need separate licenses for staging environments?
No. Your Odoo Enterprise subscription covers development, staging, and testing environments. Only production users count toward your license total. Run as many non-production instances as you need.
Can I mix Community and Enterprise modules?
All Enterprise installations include the full Community module set. The Enterprise addons directory adds modules on top of Community — it does not replace them. Your addons_path should include both directories. Community modules work alongside Enterprise modules without conflict.
Run Odoo Your Way
Community or Enterprise, self-managed Docker or fully managed platform — the choice is yours. Use this guide to set it up yourself, or let OEC.sh handle the infrastructure.
Related Resources
Odoo Docker Guide
Complete guide to running Odoo in Docker containers.
Docker Compose for Odoo
Production-ready Docker Compose setup with PostgreSQL and Nginx.
Odoo Docker Hub Reference
Official image tags, versions, and environment variables.
Odoo Ubuntu Install Guide
Install Odoo natively on Ubuntu without Docker.
Nginx Reverse Proxy Config
Production Nginx config with SSL and websocket support.
Docker Compose Generator
Generate production-ready Docker Compose files visually.
OEC.sh vs Odoo.sh
Compare OEC.sh with Odoo's own hosting platform.
OEC.sh Pricing
See plans for Community and Enterprise Odoo deployments.