You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Docker中创建含自定义插件的Odoo镜像?解决greenlet构建Wheel失败问题

解决Odoo 15 Docker镜像构建中greenlet编译失败及配置问题

看起来你在构建自定义Odoo镜像时遇到了两个核心问题:greenlet编译依赖缺失,还有Docker容器内用systemctl启动服务的错误逻辑。我来一步步帮你解决:

一、先解决greenlet构建失败的问题

greenlet是需要编译的Python包,你的基础镜像python:3缺少编译所需的系统依赖(比如C编译器、Python开发头文件等)。需要在Dockerfile中先安装这些系统包:

修正后的Dockerfile

# 选用Python3.8 slim镜像,贴合Odoo15官方的Python版本要求
FROM python:3.8-slim
ENV PYTHONUNBUFFERED=1
WORKDIR /odoo-app

# 安装编译Python包和Odoo运行所需的系统依赖
RUN apt-get update && apt-get install -y --no-install-recommends \
    gcc \
    python3-dev \
    libpq-dev \
    libssl-dev \
    libxml2-dev \
    libxslt1-dev \
    libsasl2-dev \
    libldap2-dev \
    libjpeg-dev \
    libpng-dev \
    && rm -rf /var/lib/apt/lists/*

# 复制并安装Python依赖(添加--no-cache-dir减少镜像体积)
COPY ./odoo/requirements.txt /odoo-app/requirements.txt
RUN pip install --no-cache-dir -r requirements.txt

# 复制Odoo源码和自定义插件到对应路径
COPY ./odoo /odoo-app/odoo
COPY ./addons /mnt/extra-addons

二、修正docker-compose.yml的关键错误

你的docker-compose.yml里有两个致命问题:

  1. Docker容器默认没有systemd服务管理工具,不能用sudo systemctl start odoo15.service启动服务
  2. 环境变量和挂载路径没有匹配Odoo的运行逻辑

修正后的docker-compose.yml

version: '3.8'
services:
  db:
    image: postgres:13  # Odoo15官方推荐PostgreSQL13,避免版本兼容问题
    environment:
      - POSTGRES_PASSWORD=admin
      - POSTGRES_USER=odoo15_user
      - POSTGRES_DB=hello
    volumes:
      - ./postgresql:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U odoo15_user"]
      interval: 10s
      timeout: 5s
      retries: 5

  web:
    build: .
    depends_on:
      db:
        condition: service_healthy  # 等待数据库完全就绪再启动Odoo
    ports:
      - "8001:8069"
    tty: true
    # 直接启动Odoo二进制文件,指定配置文件路径
    command: ["/odoo-app/odoo/odoo-bin", "-c", "/etc/odoo/odoo.conf"]
    environment:
      - PGDATABASE=hello
      - PGUSER=odoo15_user
      - PGPASSWORD=admin
      - PGHOST=db
    volumes:
      - ./addons:/mnt/extra-addons  # 挂载自定义插件目录
      - ./etc:/etc/odoo  # 挂载Odoo配置文件目录

三、额外的配置建议

  1. Odoo配置文件:在./etc/odoo.conf中添加必要配置,确保能加载自定义插件:
[options]
admin_passwd = your_admin_password
db_host = db
db_user = odoo15_user
db_password = admin
addons_path = /odoo-app/odoo/addons,/mnt/extra-addons
logfile = /var/log/odoo/odoo.log
  1. 权限优化:为了避免容器内权限问题,可以在Dockerfile末尾添加创建Odoo用户的步骤:
RUN useradd -m odoo
RUN chown -R odoo:odoo /odoo-app /mnt/extra-addons /etc/odoo
USER odoo

四、重新构建并运行

执行以下命令完成部署:

docker-compose down -v  # 按需清理旧容器和数据卷
docker-compose up --build

这样应该就能解决greenlet编译失败的问题,并且正确启动包含自定义插件的Odoo容器了。

内容的提问来源于stack exchange,提问作者ss mohanty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 12:54:08