Saltar al contenido principal

Imagen Docker personalizada

Ejecuta los despliegues de Odoo de tu servidor desde tu propia imagen Docker, derivada de la oficial. Así se añaden paquetes apt, bibliotecas del sistema, fuentes o paquetes Python compilados: los contenedores corren con un usuario sin privilegios y solo pip, por lo que todo lo que necesita root al construir va en la imagen.

Si solo necesitas un paquete Python normal, un requirements.txt en tu repositorio sigue siendo la opción más sencilla: se instala en cada despliegue sin ningún trabajo de imagen.


Construir la imagen

Parte de la imagen oficial de la versión de Odoo que despliegas, instala lo que necesites como root y vuelve al usuario odoo. Un ejemplo típico, que añade la biblioteca de impresión CUPS:

FROM odoo:19.0
USER root
RUN apt-get update \
&& apt-get install -y --no-install-recommends libcups2 libcups2-dev gcc python3-dev \
&& pip3 install --break-system-packages pycups \
&& apt-get purge -y gcc python3-dev libcups2-dev && apt-get autoremove -y \
&& rm -rf /var/lib/apt/lists/*
USER odoo

Mantén la estructura de la imagen: odoo en el PATH, los datos en /var/lib/odoo, los addons estándar en /usr/lib/python3/dist-packages/odoo/addons y pip3 disponible. Todo lo demás sigue a cargo de la plataforma: el código de tu repositorio y su requirements.txt se siguen montando e instalando encima.

Añadir Odoo Enterprise a la imagen

Para incluir Odoo Enterprise en tu imagen, copia los módulos Enterprise en la carpeta de addons estándar, /usr/lib/python3/dist-packages/odoo/addons. Es la única carpeta que funciona: la plataforma inicia Odoo con su propia ruta de addons, así que un addons_path definido en el odoo.conf de la imagen se ignora, y todo lo que esté en /mnt/extra-addons queda oculto por el código de tu repositorio.

Coloca el código fuente Enterprise de tu versión de Odoo junto a tu Dockerfile, por ejemplo con una cuenta de GitHub vinculada a tu suscripción de Odoo Enterprise:

git clone --depth 1 --branch 19.0 https://github.com/odoo/enterprise.git

Después copia solo las carpetas de los módulos. La raíz del repositorio Enterprise contiene archivos, entre ellos un __init__.py, que romperían la carpeta de addons de Odoo e impedirían que arranque:

FROM odoo:19.0 AS enterprise
USER root
COPY enterprise/ /src/enterprise/
RUN rm -rf /src/enterprise/.git \
&& find /src/enterprise -mindepth 1 -maxdepth 1 ! -type d -delete

FROM odoo:19.0
COPY --from=enterprise --chown=odoo:odoo /src/enterprise/ /usr/lib/python3/dist-packages/odoo/addons/

Comprueba el resultado antes de adjuntar la imagen; el comando debe mostrar la carpeta:

docker run --rm --entrypoint ls miempresa/odoo:19.0 -d /usr/lib/python3/dist-packages/odoo/addons/web_enterprise

Nunca pongas tu token de GitHub en el Dockerfile ni en la imagen.

Construye una etiqueta por versión de Odoo que despliegues, siempre <repositorio>:<versión>:

docker build -t miempresa/odoo:19.0 .

Puedes construir directamente en el servidor o subir la imagen a un registro del que el servidor pueda descargar de forma anónima.


Adjuntarla a tu servidor

  1. Abre la página de tu servidor en el panel y busca Imagen Docker personalizada.
  2. Introduce el repositorio sin etiqueta, por ejemplo miempresa/odoo o registry.miempresa.com/odoo.
  3. Si tu imagen contiene Odoo Enterprise (añadido como se describe arriba), activa La imagen ya contiene Odoo Enterprise.
  4. Guarda.

Nada se reinicia al guardar. La imagen se usa en el próximo despliegue, actualización o reinicio de cada rama de ese servidor, y el registro de build muestra la imagen que se descarga. Una reconstrucción con la misma etiqueta se toma de la misma manera.

Si la descarga falla, se usa la imagen local con ese nombre si existe en el servidor; si no existe, el despliegue falla con un mensaje que te indica construir o subir <repositorio>:<versión>. Esto requiere el agente 1.4.0 o posterior en el servidor.


Odoo Enterprise

Tres casos:

Tu servidor tiene tu token de GitHubLa imagen contiene EnterpriseResultado
da igualTu imagen, con el código Enterprise descargado con tu token añadido también; los módulos Enterprise que ya están en la imagen tienen prioridad
noTu imagen tal cual; no se descarga nada
nonoTu imagen se omite en los proyectos Enterprise, que vuelven a la imagen de la plataforma

Consulta Odoo Enterprise en tu propio servidor para el token.


Conviene saber

  • Una imagen rota falla la comprobación de salud posterior al despliegue y el despliegue se revierte como cualquier actualización fallida; el motivo está en el registro de build.
  • Solo las ramas de ese servidor usan la imagen. El alojamiento gestionado en la nube siempre usa la imagen de la plataforma.
  • Reconstruir con la misma etiqueta reapunta la etiqueta; la imagen anterior queda sin uso y se limpia automáticamente después de que las ramas hayan pasado a la nueva.
  • Registros privados: el demonio Docker del servidor puede guardar su propio inicio de sesión en el registro; Skysize nunca necesita las credenciales.