如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
由Elico Corporation维护的简单而强大的Odoo Docker镜像。
要使用此镜像,主机上必须安装最新版本的Docker。有关Docker Engine的更多信息,请参阅官方文档。
运行此镜像时不指定任何命令将显示帮助消息:
$ docker run elicocorp/odoo:10.0
要显示用户手册,使用命令man运行镜像。强烈建议将stdout重定向到less:
$ docker run elicocorp/odoo:10.0 man | less
要启动Odoo,使用命令start运行镜像:
$ docker run elicocorp/odoo:10.0 start
使用此镜像最简单的方法是将其与https://hub.docker.com/_/postgres/镜像一起运行。默认情况下,Odoo配置为连接到名为db的PostgreSQL主机。
注意: 也可以使用Elico Corp的https://hub.docker.com/r/elicocorp/postgres/。
以下是使用此镜像的简单docker-compose.yml示例。有关Compose的更多信息,请参阅官方文档。
version: '3.3' services: postgres: image: postgres:9.5 environment: - POSTGRES_USER=odoo odoo: image: elicocorp/odoo:10.0 command: start ports: - 127.0.0.1:8069:8069 links: - postgres:db environment: - ODOO_DB_USER=odoo
创建此文件后,只需进入相应文件夹并运行以下命令启动Odoo:
$ docker-compose up
注意1: 使用此配置,Odoo仅可通过以下URL从本地主机访问:<[***]>
可通过以下选项之一对外发布:
127.0.0.1:8069127.0.0.1:前缀,以便在本地主机外部发布端口8069注意2: 使用此配置:
odoo PostgreSQL用户是不需要密码的超级用户有关更多信息,请参见安全性部分。
注意3: 使用此配置,一旦容器停止,所有数据都将丢失。
有关更多信息,请参见数据持久化部分。
为提高安全性,建议:
ODOO_ADMIN_PASSWD设置Odoo主密码postgres)启动PostgreSQLPOSTGRES_PASSWORD为超级用户设置密码odoo)并设置密码,使用ODOO_DB_PASSWORD指定注意: 使用PostgreSQL超级用户运行以下SQL查询创建odoo用户:
CREATE user odoo WITH password 'strong_pg_odoo_password'; ALTER user odoo WITH createdb;
docker-compose.yml应如下所示:
version: '3.3' services: postgres: image: postgres:9.5 environment: - POSTGRES_USER=postgres - POSTGRES_PASSWORD=strong_pg_superuser_password odoo: image: elicocorp/odoo:10.0 command: start ports: - 127.0.0.1:8069:8069 links: - postgres:db environment: - ODOO_ADMIN_PASSWD=strong_odoo_master_password - ODOO_DB_USER=odoo - ODOO_DB_PASSWORD=strong_pg_odoo_password
注意: 如果Odoo位于反向代理后面,建议更改容器发布的端口(尽管此端口实际上不对外公开)。例如:
ports: - 127.0.0.1:***:8069
一旦容器被移除,所有修改(例如数据库、附件等)都将丢失。为保留数据,必须使两个主要卷持久化:
/var/lib/postgresql/data中的PostgreSQL数据库/opt/odoo/data/filestore中的Odoo文件存储可选地,还可以映射/opt/odoo/data/sessions中的Odoo会话文件夹
在以下示例中,这些卷映射到与docker-compose.yml相同文件夹下的volumes文件夹。以下命令将创建相应的文件夹:
mkdir -p ./volumes/{postgres,odoo/filestore,odoo/sessions}
docker-compose.yml应如下所示:
version: '3.3' services: postgres: image: postgres:9.5 volumes: - ./volumes/postgres:/var/lib/postgresql/data environment: - POSTGRES_USER=postgres - POSTGRES_PASSWORD=strong_pg_superuser_password odoo: image: elicocorp/odoo:10.0 command: start ports: - 127.0.0.1:8069:8069 links: - postgres:db volumes: - ./volumes/odoo/filestore:/opt/odoo/data/filestore - ./volumes/odoo/sessions:/opt/odoo/data/sessions environment: - ODOO_ADMIN_PASSWD=strong_odoo_master_password - ODOO_DB_USER=odoo - ODOO_DB_PASSWORD=strong_pg_odoo_password
注意: 使用此配置,卷中创建的所有数据将属于UID与容器内运行用户匹配的用户。
有关更多信息,请参见主机用户映射部分。
每个Docker镜像都定义了自己的用户。用户仅存在于运行的容器内部。
例如:
elicocorp/odoo镜像中,运行Odoo进程的默认用户是UID为1000的odoo用户postgres镜像中,运行PostgreSQL进程的默认用户是UID为999的postgres用户当这些用户在容器内使用时,Docker实际上会使用运行Docker的主机上的相应用户。映射基于UID,而非用户名。
如果主机上存在UID为1000的elico用户,使用默认用户运行Odoo镜像时,容器内odoo用户执行的Odoo进程实际上将由主机用户elico执行。
注意: 容器使用的用户不必在主机上实际存在。具有相应UID的***用户将自动创建。
如果主机上不存在UID为999的用户,使用默认用户运行PostgreSQL镜像时,容器内postgres用户执行的PostgreSQL进程实际上将由UID为999的***主机用户执行。
当容器内的用户拥有属于卷的文件时,主机上映射到卷的文件夹中的相应文件实际上将属于主机上的相应用户。
延续前面的示例:
odoo用户在/opt/odoo/data/filestore文件夹中创建的文件将存储在主机的./volumes/odoo/filestore文件夹中,并属于主机用户elicopostgres用户在/var/lib/postgresql/data文件夹中创建的文件将存储在主机的./volumes/postgres文件夹中,并属于UID为999的***主机用户当在主机上拥有root权限时,默认的主机用户映射行为通常不是大问题。主要影响是映射到卷的文件可能属于与相应Docker服务无关的用户。
在前面的示例中:
elico将能够读取Odoo文件存储的内容999的***主机用户将能够读取PostgreSQL数据库文件可以通过创建具有相应UID的主机用户来控制卷中文件的所有者,从而避免此问题。
然而,权限有限的用户(例如没有sudo权限)将面临更大的问题。典型用例是权限有限的用户在其主文件夹中映射卷。他期望拥有主文件夹下的所有文件,但实际情况并非如此。
延续前面的示例,如果UID为1001的主机用户seb从其主文件夹启动镜像:
./volumes/odoo/filestore中的文件将属于主机用户elico./volumes/postgres中的文件将属于UID为999的***主机用户主机用户seb即使文件位于自己的主文件夹下,也无法访问这些文件。这可能导致用户需要系统管理员帮助删除自己主文件夹下的文件的麻烦情况。
每个Docker镜像都有自己处理主机用户映射的方式:
TARGET_UID首先,主机用户需要找出自己的UID:
$ echo $UID
然后,只需将此UID分配给环境变量TARGET_UID。
启动Docker容器后,卷中创建的所有文件将属于相应的主机用户。
docker-compose.yml应如下所示:
version: '3.3' services: postgres: image: postgres:9.5 volumes: - ./volumes/postgres:/var/lib/postgresql/data - /etc/passwd:/etc/passwd:ro environment: - POSTGRES_USER=postgres - POSTGRES_PASSWORD=strong_pg_superuser_password user: 1001:1001 odoo: image: elicocorp/odoo:10.0 command: start ports: - 127.0.0.1:8069:8069 links: - postgres:db volumes: - ./volumes/odoo/filestore:/opt/odoo/data/filestore - ./volumes/odoo/sessions:/opt/odoo/data/sessions environment: - TARGET_UID=1001 - ODOO_ADMIN_PASSWD=strong_odoo_master_password - ODOO_DB_USER=odoo - ODOO_DB_PASSWORD=strong_pg_odoo_password
注意: 为实现更动态的UID映射,可以使用Compose的变量替换。只需在启动容器前导出环境变量UID,并在docker-compose.yml中用$UID替换UID。
配置文件在启动时自动生成。任何可用的Odoo参数都可以作为环境变量提供,前缀为ODOO_。
注意: 按照惯例,最好只使用大写字母,但这不是强制性的。参数将在配置文件中转换为小写。
在前面的docker-compose.yml示例中,已经定义了以下Odoo参数:
admin_passwd:环境变量ODOO_ADMIN_PASSWDdb_user:环境变量ODOO_DB_USERdb_password:环境变量ODOO_DB_PASSWORD有关Odoo参数的完整列表,请参见文档。
也可以使用自定义Odoo配置文件。最常见的方法是:
Dockerfile通过ADD指令将配置文件添加到/opt/odoo/etc/odoo.conf/opt/odoo/etc/odoo.conf此镜像允许通过卷/opt/odoo/additional_addons加载额外的Odoo模块。当在该文件夹中手动添加模块时,必须相应地定义Odoo参数addons_path:
addons_path = /opt/odoo/additional_addons,/opt/odoo/sources/odoo/addons
注意: 前面的配置假设所有模块都位于/opt/odoo/additional_addons文件夹的根目录。根据文件夹结构,可能需要调整参数。
此镜像能够自动拉取(例如git clone)包含一组模块的Git仓库。它基于https://github.com/OCA/引入的https://github.com/OCA/maintainer-quality-tools/pull/159系统。
基本上,此镜像能够在/opt/odoo/additional_addons卷中递归拉取Git仓库。所有仓库拉取完成后,addons_path参数将自动生成。
跨仓库依赖基于https://github.com/OCA/maintainer-quality-tools/blob/master/sample_files/oca_dependencies.txt语法。
注意: 此镜像集成了Git仓库缓存系统。如果卷中已存在某些仓库(例如重启容器时),容器将拉取(例如git pull)它们而不是克隆,从而加快启动速度。
克隆Git仓库最简单的方法是设置环境变量ADDONS_REPO,指定仓库的URL。
例如,要拉取https://github.com/OCA/project Git仓库及其所有依赖的Git仓库,可以使用以下docker-compose.yml:
version: '3.3' services: postgres: image: postgres:9.5 volumes: - ./volumes/postgres:/var/lib/post
以下是 elicocorp/odoo 相关的常用 Docker 镜像,适用于 不同场景 等不同场景:
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。


来自真实用户的反馈,见证轩辕镜像的优质服务