如何在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里有两个致命问题:
- Docker容器默认没有
systemd服务管理工具,不能用sudo systemctl start odoo15.service启动服务 - 环境变量和挂载路径没有匹配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配置文件目录
三、额外的配置建议
- 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
- 权限优化:为了避免容器内权限问题,可以在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
相关产品推荐
相关产品推荐

