Docker部署Odoo出现未知插件路径/root/.local/share/Odoo/addons/17.0
Odoo容器中未配置插件路径的来源与处理解析
我通过Docker Compose部署了Odoo(基于官方Dockerfile构建镜像,源码克隆自GitHub)与PostgreSQL镜像。odoo.conf中配置的插件路径如下:
[options] addons_path = /opt/odoo/odoo/addons, /mnt/extra-addons, /opt/odoo/add-ons
但最近容器运行日志中出现了一条未配置的额外插件路径:
2024-08-26 07:50:00,106 1 INFO ? odoo: addons paths: ['/opt/odoo/odoo/addons', '/root/.local/share/Odoo/addons/17.0', '/mnt/extra-addons', '/opt/odoo/addons']
这个/root/.local/share/Odoo/addons/17.0路径来源不明,我不确定将该目录挂载为卷是否安全,怀疑它是缓存类目录。
我的配置文件
docker-compose.yml
version: '3.0' services: odoo: build: . container_name: odoo depends_on: - db ports: - "8069:8069" volumes: - ./config:/etc/odoo - ./addons:/mnt/extra-addons - ./odoo:/opt/odoo - ./abc:/root/.local/share/Odoo environment: - HOST=db - USER=odoo - PASSWORD=odoo - POSTGRES_DB=postgres restart: always networks: - odoo-network command: ["-u","Hosting"] db: image: postgres:13 container_name: db environment: - POSTGRES_USER=odoo - POSTGRES_PASSWORD=odoo - POSTGRES_DB=postgres volumes: - ./data/postgres:/var/lib/postgresql/data restart: always ports: - "5433:5432" networks: - odoo-network pgadmin: image: dpage/pgadmin4 container_name: pgadmin environment: PGADMIN_DEFAULT_EMAIL: admin@admin.com PGADMIN_DEFAULT_PASSWORD: root ports: - "5050:80" networks: - odoo-network networks: odoo-network:
Dockerfile
FROM ubuntu:jammy SHELL ["/bin/bash", "-xo", "pipefail", "-c"] ENV LANG en_US.UTF-8 # Retrieve the target architecture to install the correct wkhtmltopdf package ARG TARGETARCH 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 \ gcc-aarch64-linux-gnu \ build-essential \ libreadline-dev \ zlib1g-dev \ flex \ bison && \ 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 and libpq-dev RUN echo 'deb http://apt.postgresql.org/pub/repos/apt/ jammy-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 -y python3-dev python3-psycopg2 libpq-dev \ && apt-get install libldap2-dev libsasl2-dev -y\ && apt-get install --no-install-recommends -y postgresql-client libpq-dev \ && apt-get install python3-cffi -y\ && 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 COPY ./odoo /opt/odoo COPY ./addons /mnt/extra-addons COPY ./config /etc/odoo RUN chown -R root /opt/odoo \ && chown -R root /mnt/extra-addons \ && chown -R root /etc/odoo # Install Python dependencies RUN pip install -r /opt/odoo/requirements.txt ENTRYPOINT [ "python3","/opt/odoo/odoo-bin", "-c","/etc/odoo/odoo.conf" ]
问题解析与处理建议
1. 路径来源
/root/.local/share/Odoo/addons/17.0是Odoo的用户级默认插件目录:
- Odoo会自动为运行用户添加这个搜索路径,用于存放通过Odoo界面安装的第三方插件(比如应用商店下载的插件)。
- 因为你的容器中Odoo默认以
root用户运行(Dockerfile未切换用户),所以路径指向root用户的本地共享目录。
2. 挂载该目录的安全性
挂载该目录是安全的,用途分两种情况:
- 若你需要通过Odoo界面安装插件,挂载后可让插件数据持久化,容器重启不会丢失已安装的界面插件。
- 若所有插件都通过本地目录(如
/mnt/extra-addons)挂载部署,这个目录仅存储临时缓存或界面安装的插件,挂载与否不影响核心业务,但挂载可避免容器重启时丢失临时数据。
3. 控制或移除该路径的方法
如果不想让这个路径出现在插件搜索列表中,可通过以下方式处理:
- 修改odoo.conf指定自定义数据目录:在
[options]段添加data_dir参数,将用户插件目录转移到自定义路径:
此时Odoo会将用户插件目录放在[options] addons_path = /opt/odoo/odoo/addons, /mnt/extra-addons, /opt/odoo/add-ons data_dir = /var/lib/odoo/var/lib/odoo/addons/17.0,可按需选择是否挂载该路径。 - 切换非root运行用户:在Dockerfile中创建并切换到普通用户,避免使用root目录:
此时用户级插件目录会变为RUN useradd -m odoo USER odoo/home/odoo/.local/share/Odoo/addons/17.0。 - 直接忽略:该路径仅作为额外搜索路径存在,不会影响已配置的插件,若无特殊需求可无需处理。
内容的提问来源于stack exchange,提问作者Thịnh Thông Thái
相关产品推荐
相关产品推荐

