Skip to content

快速参考

支持的标签及各自的 Dockerfile 链接

快速参考(续)

什么是 Odoo?

Odoo,前身为 OpenERP,是一套用 Python 编写的开源商业应用程序,根据 LGPL 许可证发布。这套应用程序涵盖了所有业务需求,从网站/电子商务到制造、库存和会计,所有这些都无缝集成。这是有史以来第一次有软件编辑者能够达到如此广泛的功能覆盖。Odoo 是世界上安装最多的商业软件。全球有 200 万用户使用 Odoo,用户范围从小型公司(1 个用户)到大型公司(30 万个用户)。

www.odoo.com

logo

如何使用此图像

此图像需要运行中的 PostgreSQL 服务器。

启动一个 PostgreSQL 服务器

$ docker run -d -e POSTGRES_USER=odoo -e POSTGRES_PASSWORD=odoo -e POSTGRES_DB=postgres --name db postgres:15

启动一个 Odoo 实例

$ docker run -p 8069:8069 --name odoo --link db:db -t odoo

运行 Postgres 的容器的别名必须为 db,以便 Odoo 能够连接到 Postgres 服务器。

停止并重新启动一个 Odoo 实例

$ docker stop odoo
$ docker start -a odoo

使用命名卷来保存数据

当按照上述描述创建 Odoo 容器时,odoo 文件存储区会在容器内部创建。如果容器被删除,文件存储区将丢失。防止这种情况的首选方法是使用 Docker 命名卷。

$ docker run -v odoo-data:/var/lib/odoo -d -p 8069:8069 --name odoo --link db:db -t odoo

使用上述命令,名为 odoo-data 的卷即使容器被移除也将持续存在,并且可以通过发出相同命令来重新使用。

作为卷的挂载点使用的路径 /var/lib/odoo 必须与配置文件中或作为 CLI 参数的 odoo data_dir 相匹配。

请注意,同样的原则适用于 Postgresql 容器,并且可以使用命名卷在删除容器时保留数据库。因此,数据库容器可以像这样启动(在 odoo 容器之前):

$ docker run -d -v odoo-db:/var/lib/postgresql/data -e POSTGRES_USER=odoo -e POSTGRES_PASSWORD=odoo -e POSTGRES_DB=postgres --name db postgres:15

停止并重新启动 PostgreSQL 服务器

当 PostgreSQL 服务器重新启动时,链接到该服务器的 Odoo 实例也必须重新启动,因为服务器地址已更改,链接因此中断。

重新启动 PostgreSQL 服务器不会影响已创建的数据库。

使用自定义配置运行 Odoo

服务器的默认配置文件(位于 /etc/odoo/odoo.conf )在启动时可使用卷进行覆盖。假设您在 /path/to/config/odoo.conf 有一个自定义配置,那么

$ docker run -v /path/to/config:/etc/odoo -p 8069:8069 --name odoo --link db:db -t odoo

请使用此配置模板编写您的自定义配置,因为我们已经为在 Docker 容器中运行 Odoo 设置了一些参数。

您也可以直接在命令行中内联指定 Odoo 参数。这些参数必须在命令行中关键字 -- 之后给出,如下所示

$ docker run -p 8069:8069 --name odoo --link db:db -t odoo -- --db-filter=odoo_db_.*

安装自定义插件

您可以在 Odoo 容器内安装您自己的 Odoo 插件,在 /mnt/extra-addons

$ docker run -v /path/to/addons:/mnt/extra-addons -p 8069:8069 --name odoo --link db:db -t odoo

注意:虽然没有官方的 Odoo 企业版 Docker 镜像,但可以使用上述提到的方法挂载企业模块。

运行多个 Odoo 实例

$ docker run -p 8070:8069 --name odoo2 --link db:db -t odoo
$ docker run -p 8071:8069 --name odoo3 --link db:db -t odoo

注意:对于邮件和报告功能的普通使用,当主机和容器端口不同(例如 8070 和 8069)时,在 Odoo 中,必须将 Settings->Parameters->System Parameters (需要技术特性),web.base.url 设置为容器端口(例如 127.0.0.1:8069)。

环境变量

调整这些环境变量以轻松连接到 PostgreSQL 服务器:

  • HOST :postgres 服务器的地址。如果您使用了 postgres 容器,将其设置为容器的名称。默认为 db
  • PORT :Postgres 服务器正在监听的端口。默认为 5432
  • USER :Odoo 将用于连接的 postgres 角色。如果您使用了 postgres 容器,则将其设置为与 POSTGRES_USER 相同的值。默认值为 odoo
  • PASSWORD :Odoo 用于连接的 postgres 角色的密码。如果您使用了 postgres 容器,将其设置为与 POSTGRES_PASSWORD 相同的值。默认值为 odoo

Docker Compose 示例

最简单的 docker-compose.yml 文件会是:

version: '3.1'
services:
  web:
    image: odoo:17.0
    depends_on:
      - db
    ports:
      - "8069:8069"
  db:
    image: postgres:15
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_PASSWORD=odoo
      - POSTGRES_USER=odoo

如果默认的 postgres 凭证不适合您,请调整环境变量:

version: '3.1'
services:
  web:
    image: odoo:17.0
    depends_on:
      - mydb
    ports:
      - "8069:8069"
    environment:
    - HOST=mydb
    - USER=odoo
    - PASSWORD=myodoo
  mydb:
    image: postgres:15
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_PASSWORD=myodoo
      - POSTGRES_USER=odoo

这里有最后一个示例向您展示如何

  • 将位于 ./addons 的自定义插件进行挂载
  • 使用位于 .config/odoo.conf 的自定义配置文件
  • 将 Odoo 和 postgres 数据目录使用命名卷
  • 使用名为 odoo_pg_passsecrets 文件,该文件包含两个服务共享的 postgreql 密码

    version: '3.1' services: web: image: odoo:17.0 depends_on: - db ports: - "8069:8069" volumes: - odoo-web-data:/var/lib/odoo - ./config:/etc/odoo - ./addons:/mnt/extra-addons environment: - PASSWORD_FILE=/run/secrets/postgresql_password secrets: - postgresql_password db: image: postgres:15 environment: - POSTGRES_DB=postgres - POSTGRES_PASSWORD_FILE=/run/secrets/postgresql_password - POSTGRES_USER=odoo - PGDATA=/var/lib/postgresql/data/pgdata volumes: - odoo-db-data:/var/lib/postgresql/data/pgdata secrets: - postgresql_password volumes: odoo-web-data: odoo-db-data:

    secrets: postgresql_password: file: odoo_pg_pass

要启动您的 Odoo 实例,请进入您从前面的示例中创建的 docker-compose.yml 文件所在的目录,并输入:

docker-compose up -d

如何升级此图像

Odoo 镜像会定期更新,以使其使用最新版本(Odoo 每个版本的新版本每晚都会构建)。请注意,以下内容是关于在同一主要版本内从旧版本升级到提供的最新版本,因为从一个主要版本升级到另一个主要版本是一个更为复杂的过程,需要精心编写的迁移脚本(请参阅 Odoo 升级页面或此旨在编写这些脚本的社区项目)。

假设您从名为 old-odoo 的 Odoo 实例创建了一个数据库,并且您想要从名为 new-odoo 的新 Odoo 实例访问此数据库,例如因为您刚刚下载了一个更新的 Odoo 镜像。

默认情况下,Odoo 16.0 及以上版本使用文件存储(位于 /var/lib/odoo/filestore/ )来存储附件。您应通过运行来在新的 Odoo 实例中恢复此文件存储。

$ docker run --volumes-from old-odoo -p 8070:8069 --name new-odoo --link db:db -t odoo

许可证

查看此映像中所包含软件的许可证信息。

与所有 Docker 镜像一样,这些镜像可能还包含其他可能受其他许可证约束的软件(例如来自基础发行版的 Bash 等,以及所包含的主要软件的任何直接或间接依赖项)。

一些能够自动检测到的额外许可信息可能会在 repo-info 存储库的 odoo/ 目录中找到。

对于任何预构建图像的使用,图像用户有责任确保对此图像的任何使用都符合其中包含的所有软件的任何相关许可。