# ============================================================================= # os-dev — custom Odoo 19 image # # This Dockerfile is a VERBATIM copy of the official one from # https://github.com/odoo/docker/blob/master/19.0/Dockerfile (maintained by # Odoo S.A. for the `odoo` Docker Official Image on Docker Hub), with one # addition: `pip install -r requirements.txt` after the Odoo .deb install, # so the image can carry custom Python dependencies for our addons. # # Live-coding workflow: # * docker compose up -d (binds the host's os-dev/ to /mnt/os-dev) # * Edit any .py in os-dev/ -> --dev=reload picks it up automatically # * requirements.txt change -> `docker compose build` (only this triggers # a rebuild; otherwise the layer cache is reused) # # The SHA-pinned release matches the 1b-agent/odoo-docker-upstream mirror # we use as source of truth. # ============================================================================= FROM ubuntu:noble LABEL maintainer="one_b_os <1b-agent@1bspace.com>" SHELL ["/bin/bash", "-xo", "pipefail", "-c"] # Generate locale C.UTF-8 for postgres and general locale data ENV LANG=en_US.UTF-8 # Retrieve the target architecture to install the correct wkhtmltopdf package ARG TARGETARCH # Install some deps, lessc and less-plugin-clean-css, and wkhtmltopdf RUN apt-get update && \ DEBIAN_FRONTEND=noninteractive \ apt-get install -y --no-install-recommends \ ca-certificates \ curl \ dirmngr \ fonts-noto-cjk \ gnupg \ libssl-dev \ node-less \ npm \ python3-magic \ python3-num2words \ python3-odf \ python3-pdfminer \ python3-pip \ python3-phonenumbers \ python3-pyldap \ python3-qrcode \ python3-renderpm \ python3-setuptools \ python3-slugify \ python3-vobject \ python3-watchdog \ python3-xlrd \ python3-xlwt \ xz-utils && \ if [ -z "${TARGETARCH}" ]; then \ TARGETARCH="$(dpkg --print-architecture)"; \ fi; \ WKHTMLTOPDF_ARCH=${TARGETARCH} && \ case ${TARGETARCH} in \ "amd64") WKHTMLTOPDF_ARCH=amd64 && WKHTMLTOPDF_SHA=967390a759707337b46d1c02452e2bb6b2dc6d59 ;; \ "arm64") WKHTMLTOPDF_SHA=90f6e69896d51ef77339d3f3a20f8582bdf496cc ;; \ "ppc64le" | "ppc64el") WKHTMLTOPDF_ARCH=ppc64el && WKHTMLTOPDF_SHA=5312d7d34a25b321282929df82e3574319aed25c ;; \ esac \ && curl -o wkhtmltox.deb -sSL https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-3/wkhtmltox_0.12.6.1-3.jammy_${WKHTMLTOPDF_ARCH}.deb \ && echo ${WKHTMLTOPDF_SHA} wkhtmltox.deb | sha1sum -c - \ && apt-get install -y --no-install-recommends ./wkhtmltox.deb \ && rm -rf /var/lib/apt/lists/* wkhtmltox.deb # install latest postgresql-client RUN echo 'deb http://apt.postgresql.org/pub/repos/apt/ noble-pgdg main' > /etc/apt/sources.list.d/pgdg.list \ && GNUPGHOME="$(mktemp -d)" \ && export GNUPGHOME \ && repokey='B97B0AFCAA1A47F044F244A07FCC7D46ACCC4CF8' \ && gpg --batch --keyserver keyserver.ubuntu.com --recv-keys "${repokey}" \ && gpg --batch --armor --export "${repokey}" > /etc/apt/trusted.gpg.d/pgdg.gpg.asc \ && gpgconf --kill all \ && rm -rf "$GNUPGHOME" \ && apt-get update \ && apt-get install --no-install-recommends -y postgresql-client \ && rm -f /etc/apt/sources.list.d/pgdg.list \ && rm -rf /var/lib/apt/lists/* # Install rtlcss (on Debian buster) RUN npm install -g rtlcss # Install Odoo ENV ODOO_VERSION=19.0 ARG ODOO_RELEASE=20260817 ARG ODOO_SHA=7e6c102efc7e2ad56801432fef7e2e0d2f703e5a RUN curl -o odoo.deb -sSL http://nightly.odoo.com/${ODOO_VERSION}/nightly/deb/odoo_${ODOO_VERSION}.${ODOO_RELEASE}_all.deb \ && echo "${ODOO_SHA} odoo.deb" | sha1sum -c - \ && apt-get update \ && apt-get -y install --no-install-recommends ./odoo.deb \ && rm -rf /var/lib/apt/lists/* odoo.deb # ============================================================================= # os-dev addition over the official image: # Install our custom Python deps from the repo's requirements.txt. # --break-system-packages is required because Ubuntu 24.04 ships PEP 668. # This is the ONE thing that requires an image rebuild; everything else in # the image layers above is cached and reused. # ============================================================================= COPY requirements.txt /tmp/requirements.txt RUN pip3 install --no-cache-dir --break-system-packages -r /tmp/requirements.txt \ && rm /tmp/requirements.txt # Copy entrypoint script and Odoo configuration file (verbatim from official) COPY ./entrypoint.sh / COPY ./odoo.conf /etc/odoo/ # Set permissions and Mount /var/lib/odoo to allow restoring filestore and /mnt/extra-addons for users addons RUN chown odoo /etc/odoo/odoo.conf \ && mkdir -p /mnt/extra-addons \ && chown -R odoo /mnt/extra-addons VOLUME ["/var/lib/odoo", "/mnt/extra-addons"] # Expose Odoo services EXPOSE 8069 8071 8072 # Set the default config file ENV ODOO_RC=/etc/odoo/odoo.conf COPY wait-for-psql.py /usr/local/bin/wait-for-psql.py # Set default user when running the container USER odoo ENTRYPOINT ["/entrypoint.sh"] CMD ["odoo"]