Se rendre au contenu

Installer Odoo 19 avec Docker

Bloc 1 · Installation — Article 3/3 Installer Odoo 19 avec Docker Odoo 19 opérationnel en 5 minutes, sans installer Python ni PostgreSQL sur ta machine.
26 avril 2026 par
Installer Odoo 19 avec Docker
B.Mustapha

Bloc 1 · Installation — Article 3/3

Installer Odoo 19 avec Docker

Odoo 19 opérationnel en 5 minutes, sans installer Python ni PostgreSQL sur ta machine. On utilise l'image officielle Docker et docker compose pour un environnement reproductible et jetable à volonté.

~14 minutes de lecture

Ce que tu vas apprendre

Docker Compose

Orchestrer Odoo 19 et PostgreSQL 16 avec un seul fichier YAML.

Volumes persistants

Conserver les données, le filestore et tes modules entre les redémarrages.

Modules custom

Monter ton répertoire de modules dans le container pour développer en live.

Multi-instances

Faire tourner plusieurs versions d'Odoo côte à côte sur la même machine.

Prérequis
  • Docker Engine installé — Linux ou Docker DesktopWindows / macOS
  • Docker Compose V2 (inclus dans Docker Desktop et les installations récentes de Docker Engine)
  • Minimum 4 Go de RAM (8 Go recommandés)
  • ~2 Go d'espace disque pour les images Docker

Cette méthode est idéale pour tester rapidement Odoo ou pour monter un environnement de développement reproductible. Tu n'as besoin d'installer ni Python, ni PostgreSQL, ni wkhtmltopdf sur ta machine — tout est dans les containers.

Docker Compose V1 vs V2 — Depuis 2023, la commande s'écrit docker compose (avec un espace, V2) et non plus docker-compose (avec un tiret, V1). Si tu as une ancienne installation, mets à jour Docker. Dans cet article on utilise la syntaxe V2.

Architecture Docker Odoo

Deux containers communiquent via un réseau Docker interne. Les données sont stockées dans des volumes nommés qui survivent à la destruction des containers.

Architecture Docker Odoo 19 : containers, volumes et réseau

Le container db (PostgreSQL 16) et le container odoo (Odoo 19) partagent un réseau Docker. Les volumes verts persistent les données sur le disque hôte.

Étape 1 — Vérifier l'installation Docker

Ouvre un terminal et vérifie que Docker et Compose sont disponibles :

docker --version
# Attendu : Docker version 27.x.x (ou supérieur)

docker compose version
# Attendu : Docker Compose version v2.x.x
Permission denied ? Sur Linux, ajoute ton utilisateur au groupe docker pour ne pas avoir à taper sudo à chaque commande :
sudo usermod -aG docker $USER
# Déconnecte-toi puis reconnecte-toi pour que le changement prenne effet

Étape 2 — Créer la structure du projet

Crée un répertoire dédié à ton projet Odoo Docker :

mkdir -p ~/odoo19-docker/custom-addons
cd ~/odoo19-docker

La structure cible :

~/odoo19-docker/
├── docker-compose.yml     # Orchestration des containers
├── odoo.conf              # Configuration Odoo (optionnel)
└── custom-addons/         # Tes modules personnalisés

Étape 3 — Écrire le fichier docker-compose.yml

C'est le fichier central. Crée docker-compose.yml dans ~/odoo19-docker/ :

services:
  db:
    image: postgres:16
    container_name: odoo19-db
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_USER=odoo
      - POSTGRES_PASSWORD=odoo
    volumes:
      - odoo-db:/var/lib/postgresql/data
    restart: unless-stopped

  odoo:
    image: odoo:19.0
    container_name: odoo19-web
    depends_on:
      - db
    ports:
      - "8069:8069"
      - "8072:8072"
    environment:
      - HOST=db
      - PORT=5432
      - USER=odoo
      - PASSWORD=odoo
    volumes:
      - odoo-data:/var/lib/odoo
      - ./custom-addons:/mnt/extra-addons
      - ./odoo.conf:/etc/odoo/odoo.conf:ro
    restart: unless-stopped

volumes:
  odoo-db:
  odoo-data:
Décryptage ligne par ligne
  • image: postgres:16 — l'image officielle PostgreSQL 16. Odoo 19 requiert PostgreSQL 13 minimum.
  • image: odoo:19.0 — l'image officielle Odoo 19 maintenue par Odoo S.A. Inclut Python 3.12, wkhtmltopdf 0.12.6.1 et toutes les dépendances.
  • depends_on: db — Docker démarre PostgreSQL avant Odoo. L'entrypoint attend automatiquement que PostgreSQL soit prêt (timeout 30s).
  • HOST=db — le hostname du container PostgreSQL dans le réseau Docker interne.
  • odoo-db, odoo-data — volumes nommés Docker qui persistent les données même après un docker compose down.
  • ./custom-addons:/mnt/extra-addons — bind mount : tes modules locaux sont directement visibles dans le container.
  • ./odoo.conf:/etc/odoo/odoo.conf:ro — ta config custom montée en lecture seule.
  • 8072:8072 — port longpolling pour le temps réel (discuss, notifications).

Étape 4 — Créer le fichier de configuration (optionnel)

Par défaut, l'image Docker Odoo fonctionne sans fichier de configuration. Mais pour personnaliser le comportement, crée odoo.conf :

[options]
; Mot de passe maître — protège la page /web/database/manager
admin_passwd = change_moi_en_production

; Répertoire des modules custom (correspond au bind mount)
addons_path = /mnt/extra-addons

; Filestore (correspond au volume odoo-data)
data_dir = /var/lib/odoo

; Logs dans la console Docker (pas dans un fichier)
logfile = None
log_level = info

; Filtrer les bases affichées (regex)
; dbfilter = ^mydb$

; Nombre de workers (0 = mono-thread, bon pour le dev)
workers = 0
Pourquoi logfile = None ? En Docker, les logs doivent aller sur stdout/stderr pour être capturés par docker compose logs. Si tu mets un fichier, les logs seront piégés dans le container et perdus à sa destruction.

Étape 5 — Lancer Odoo

Depuis le répertoire ~/odoo19-docker/, lance les deux containers :

docker compose up -d

Docker télécharge les images (première fois uniquement), crée les volumes et démarre les containers. Suis les logs en temps réel :

docker compose logs -f odoo

Quand tu vois cette ligne, Odoo est prêt :

odoo19-web  | INFO ? odoo.modules.loading: Modules loaded.

Ouvre http://localhost:8069 dans ton navigateur. Crée ta première base de données et c'est parti.

Commandes courantes

# Arrêter les containers (les données sont conservées)
docker compose stop

# Redémarrer les containers
docker compose start

# Arrêter ET supprimer les containers (les volumes persistent)
docker compose down

# Arrêter, supprimer containers ET volumes (PERTE DE DONNÉES)
docker compose down -v

# Voir les logs en temps réel
docker compose logs -f

# Vérifier l'état des containers
docker compose ps
Attentiondocker compose down -v supprime les volumes nommés et donc toutes les données (bases PostgreSQL + filestore Odoo). Utilise cette commande uniquement pour repartir de zéro.

Étape 6 — Développer avec des modules custom

Grâce au bind mount ./custom-addons:/mnt/extra-addons, tout module que tu places dans le répertoire custom-addons/ est immédiatement visible par Odoo.

Pour que Odoo détecte un nouveau module :

  1. Place ton module dans ~/odoo19-docker/custom-addons/mon_module/
  2. Dans Odoo, active le mode développeur (Paramètres → Activer le mode développeur)
  3. Va dans Applications → Mettre à jour la liste des applications
  4. Cherche et installe ton module

Pour mettre à jour un module après modification du code :

# Méthode 1 : redémarrer le container avec l'option -u
docker compose run --rm odoo -- -u mon_module -d ma_base --stop-after-init

# Méthode 2 : redémarrer simplement le container
docker compose restart odoo
Astuce — Pour accéder au shell du container Odoo (debug, tests) :
docker compose exec odoo bash

Étape 7 — Faire tourner plusieurs instances

L'un des grands avantages de Docker : tu peux faire tourner plusieurs versions d'Odoo côte à côte sur la même machine, chacune avec sa propre base PostgreSQL.

Crée un deuxième répertoire pour Odoo 18, par exemple :

mkdir -p ~/odoo18-docker/custom-addons
cd ~/odoo18-docker

Et un docker-compose.yml adapté avec des noms et ports différents :

services:
  db:
    image: postgres:16
    container_name: odoo18-db
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_USER=odoo
      - POSTGRES_PASSWORD=odoo
    volumes:
      - odoo18-db:/var/lib/postgresql/data

  odoo:
    image: odoo:18.0
    container_name: odoo18-web
    depends_on:
      - db
    ports:
      - "8070:8069"
      - "8073:8072"
    environment:
      - HOST=db
      - PORT=5432
      - USER=odoo
      - PASSWORD=odoo
    volumes:
      - odoo18-data:/var/lib/odoo
      - ./custom-addons:/mnt/extra-addons

volumes:
  odoo18-db:
  odoo18-data:

Résultat : Odoo 19 tourne sur localhost:8069 et Odoo 18 sur localhost:8070. Les deux instances sont complètement isolées.

Instance Port HTTP Port longpolling Container DB
Odoo 1980698072odoo19-db
Odoo 1880708073odoo18-db
Changements v19 — Ce qui change dans l'image Docker Odoo 19 :
  • Base Ubuntu Noble (24.04) : l'image Odoo 19 est basée sur Ubuntu 24.04 LTS (les versions précédentes utilisaient Debian).
  • Python 3.12 : inclus nativement dans l'image.
  • PostgreSQL 13 minimum : utilise postgres:16 dans ton compose (pas postgres:12).
  • Tag latest : depuis la sortie d'Odoo 19, odoo:latest pointe vers 19.0. Préfère toujours un tag explicite (odoo:19.0) pour éviter les surprises.
  • Architectures : l'image supporte amd64, arm64 (Apple Silicon M1/M2/M3) et ppc64le.

Dépannage — Les erreurs les plus courantes

Erreur Solution
port is already allocated Un autre service utilise le port 8069. Change le port dans le compose : "8080:8069"
connection refused (Odoo → PostgreSQL) PostgreSQL n'a pas fini de démarrer. L'entrypoint attend 30 secondes automatiquement. Si ça persiste, vérifie les logs : docker compose logs db
FATAL: password authentication failed Les variables USER/PASSWORD du service Odoo ne correspondent pas à POSTGRES_USER/POSTGRES_PASSWORD
Module custom non détecté Vérifie que addons_path dans odoo.conf inclut /mnt/extra-addons et que le module a un __manifest__.py
Rapports PDF vides L'image officielle inclut wkhtmltopdf. Si tu utilises une image custom, vérifie que wkhtmltopdf 0.12.6.1 est installé dans l'image
no space left on device Nettoie les images/volumes inutilisés : docker system prune -a

Récapitulatif

Voici la checklist de ton environnement Docker Odoo :

Composant Détail
Image Odooodoo:19.0 (Ubuntu Noble, Python 3.12, wkhtmltopdf inclus)
Image PostgreSQLpostgres:16
Port HTTP8069 → localhost:8069
Port longpolling8072 → localhost:8072
Volume DBodoo-db → /var/lib/postgresql/data
Volume filestoreodoo-data → /var/lib/odoo
Modules custom./custom-addons → /mnt/extra-addons
Configuration./odoo.conf → /etc/odoo/odoo.conf

Comparatif des 3 méthodes d'installation

Tu as maintenant vu les trois méthodes d'installation du Bloc 1. Voici un résumé pour t'aider à choisir :

Ubuntu (sources) Windows (sources) Docker
Temps d'installation ~20 min ~30 min ~5 min
Contrôle du code Total (git clone) Total (git clone) Limité (image pré-compilée)
Debug Python Natif (breakpoints) Natif (breakpoints) Possible mais plus complexe
Multi-versions Via venvs séparés Via venvs séparés Trivial (un compose par version)
Reproductibilité Moyenne Moyenne Excellente
Idéal pour Développement, production Développement Test, CI/CD, démos

Pour aller plus loin

  • Nginx reverse proxy : ajoute un service nginx dans le compose pour gérer SSL et le routage multi-domaines
  • Sauvegardes automatiques : utilise docker compose exec db pg_dump dans un cron pour sauvegarder tes bases
  • Workers en production : passe workers = 4 dans odoo.conf et augmente les limites mémoire
  • Dockerfile custom : si tu as besoin de paquets Python supplémentaires, crée un Dockerfile qui hérite de odoo:19.0 et ajoute tes dépendances

Liens utiles

Télécharge le Guide Technique Odoo 19

Architecture, pièges v19, checklist premier module — tout dans un PDF gratuit.

Télécharger le guide
Installer Odoo 19 sur Windows 10/11
Bloc 1 · Installation — Article 2/3 Installer Odoo 19 sur Windows 10/11 Ton environnement de développement Odoo 19 complet sur Windows en moins de 30 minutes.