Auto Upgrade Odoo Modules with Docker for Faster Development

When developing custom Odoo modules, repeatedly restarting Docker containers and manually clicking Upgrade inside Odoo can significantly slow down your workflow.

If your team is building custom ERP features or providing Odoo implementation services, automating module upgrades can save hours during development.

This guide explains how to configure Docker so Odoo automatically reloads your code and upgrades one or more modules whenever the server starts.

Why Automatically Upgrade Odoo Modules?

During Odoo development, changes to:

  • Python models
  • XML views
  • Security rules
  • Access control lists
  • Module manifests
  • Data files

often require restarting Odoo and upgrading the affected modules before the changes take effect.

Instead of manually upgrading modules every time, you can configure Docker to do it automatically.

A typical development command looks like this:

command: >
  -- --dev=all
  -d smart_address
  -u floo_smart_address

Understanding the Odoo Startup Flags

-d smart_address

The -d option specifies which Odoo database should be used when the server starts.

Example:

./odoo-bin -d smart_address

If you work with multiple development databases, this ensures Docker always launches the correct one.


-u floo_smart_address

The -u flag tells Odoo to automatically upgrade one or more modules during startup.

Running this command is equivalent to:

./odoo-bin -u floo_smart_address

During the upgrade process, Odoo will:

  • Reload XML views
  • Update security rules
  • Apply ORM model changes
  • Refresh access control lists
  • Process manifest updates
  • Execute upgrade scripts when applicable

This eliminates the need to manually open Apps → Upgrade after every restart.


Upgrading Multiple Modules

If your project consists of multiple custom modules, simply separate them with commas.

Example:

command: >
  -- --dev=all
  -d smart_address
  -u module_sales,module_inventory,module_accounting

Odoo will upgrade each module in the order provided before becoming available.

This is particularly useful for projects where several custom modules depend on one another, such as:

  • Base module
  • Sales customization
  • Inventory customization
  • Accounting integration

Keeping all actively developed modules in the -u list ensures every restart reflects your latest changes.

Tip: Only include the modules you’re actively developing. Upgrading unnecessary modules increases startup time.


--dev=all

The --dev=all flag enables all of Odoo’s available development features.

Compared to --dev=reload, it provides a more comprehensive development environment by enabling additional debugging and developer tools alongside automatic code reloading.

For most local development environments, --dev=all is the easiest option because you don’t need to selectively enable development features.

What --dev=all Helps With

  • Automatically reloads Python code when changes are detected.
  • Enables developer-friendly debugging features.
  • Makes frontend and backend development easier.
  • Improves visibility into templates, assets, and development logs.

What Still Requires a Module Upgrade?

Even with --dev=all, Odoo does not automatically reload everything.

File TypeAutomatically Applied?
Python (.py)✅ Yes
XML Views❌ Requires module upgrade
Security CSV❌ Requires module upgrade
Manifest (__manifest__.py)❌ Requires module upgrade
Data Files❌ Requires module upgrade

That’s why combining --dev=all with -u creates an excellent development workflow.


Recommended Odoo Docker Development Workflow

With this configuration, your daily workflow becomes:

  1. Edit Python or XML files.
  2. Save your changes.
  3. Odoo detects code changes and restarts automatically.
  4. Your specified modules are upgraded.
  5. Refresh your browser.

No manual container restart.

No manual module upgrade.

No repeated clicks inside the Apps menu.

This setup is especially useful for custom Odoo module development, ERP customization, and long-running Odoo implementation projects.


Example Docker Compose Configuration

services:
  odoo:
    image: odoo:19
    ports:
      - "8069:8069"
    volumes:
      - ./addons:/mnt/extra-addons
    command: >
      -- --dev=all
      -d smart_address
      -u module_sales,module_inventory,module_accounting

This configuration automatically:

  • Starts Odoo using the selected database.
  • Enables all Odoo development features.
  • Detects Python code changes.
  • Restarts the server when necessary.
  • Upgrades all specified custom modules.

Best Practices

For the fastest development experience:

  • Use --dev=all only in local development.
  • Upgrade only the custom modules you’re actively working on.
  • Avoid -u all unless you intentionally need to upgrade every installed module, as it can dramatically increase startup time.
  • Group related modules together in the -u list when they have dependencies.

Conclusion

Using --dev=all together with the -u option creates an efficient Odoo development workflow. Python code reloads automatically, while your selected modules are upgraded on every restart, ensuring XML views, security rules, and metadata remain synchronized.

If your project contains multiple custom modules, simply list them as a comma-separated value in the -u flag. This approach keeps all active modules up to date while avoiding the overhead of upgrading your entire Odoo installation on every restart.

Book a Free Consultation

Haven’t found the right solution yet?
Tell us about your needs, and let’s discuss the best solution together.