本文基于 dolibarr/dolibarr:22.0.5,以22.0.5版本实测,测试平台Ubuntu 24.04Linux。
小公司开报价单还在 Word 里改抬头,客户电话散在销售微信与旧 Excel;仓库盘点一张纸,财务月底再手工对一遍发票号。换人交接时说不清「哪份才是最终版」,催款也要对着聊天记录翻。业务体量不大,却已经需要联系人、报价、订单、库存和简单财务在同一处。
把整套系统塞进公有云 SaaS,客户资料与发票附件会出域;自己从源码装 PHP、配 Apache、再手搓 MySQL,对只要先有一个内网网址的人成本太高。机房或家里已经有一台跑 Docker 的 Ubuntu,缺的是:镜像能拉下来、数据库和应用一起起来、浏览器打开就能建公司与客户。
Dolibarr(官网、GitHub · dolibarr/dolibarr、镜像页)是开源 ERP / CRM:客户与供应商、报价与发票、库存、费用报销、休假等能力按模块开关。官方镜像dolibarr/dolibarr只带 Web(PHP + Apache),不内置数据库,需要单独准备 MariaDB 或 MySQL。本文使用dolibarr/dolibarr:22.0.5版本实测:Compose 拉起 Web 与 MariaDB 后,安装程序会自动创建数据库和管理员,附件与外部模块写在本机目录。
跑通之后,可以在浏览器里完善公司资料、按需打开模块,再建客户、开报价,或先走费用报销 / 休假这类人事流程——业务数据都在自己的盘上。
一、环境要求
| 项目 | 建议 |
|---|---|
| 系统 | Linux,建议Ubuntu 24.04;macOS 目录用~/docker/dolibarr |
| Docker | Engine +Compose V2 |
| 架构 | linux/amd64、linux/arm64(22.0.5均有) |
| 内存 | 建议 ≥2 GB空闲(Web + MariaDB) |
| 磁盘 | 应用 DISK1.33 GB/ CONTENT319 MB;MariaDB DISK455 MB/ CONTENT108 MB;业务数据另计 |
| 端口 | 宿主机8088→ 容器80 |
| 工作目录 | /www/wwwroot/dolibarr |
docker--versiondockercompose versionLinux 未装 Docker 可使用轩辕镜像一键安装脚本:
bash<(wget-qO- https://get.xuanyuan.cloud/docker.sh)备用地址:
bash<(wget-qO- https://get.xuanyuan.me/docker.sh)更多见轩辕镜像使用手册。
二、拉取镜像
2.1 标签怎么选
| 标签 | 说明 | 本文是否采用 |
|---|---|---|
22.0.5 | 22.x 较新的具体稳定版;amd64 / arm64 | 采用 |
22.0.5-php8.2 | 与22.0.5同源,标明 PHP 8.2 | 可等价选用 |
22.0.4及更早 | 旧补丁 | 仅回退时用 |
develop | 开发线 | 勿写入生产命令 |
latest | 浮动标签 | 勿写入文中命令 |
完整列表见标签页。
升级应用时,只修改 Compose 里的 Dolibarr 镜像标签。
保留mariadb、documents、custom三个目录。
install.lock的处理见下文 FAQ 「升级大版本怎么做」。
2.2 用轩辕镜像加速拉取
dockerpull docker.xuanyuan.run/dolibarr/dolibarr:22.0.5dockerpull docker.xuanyuan.run/library/mariadb:11.4.13Ubuntu 24.04 实测:
22.0.5: Pulling from dolibarr/dolibarr ... Digest: sha256:a9f033f7a37a8270d6190c477cb0510fbe3e7da77384715e7773856894cd13ec Status: Downloaded newer image for docker.xuanyuan.run/dolibarr/dolibarr:22.0.5 docker.xuanyuan.run/dolibarr/dolibarr:22.0.511.4.13: Pulling from library/mariadb ... Digest: sha256:70cc072b29b4a89ae07abb2d4da2c64678a7f2dfe092751bb51c87d67dc1338b Status: Downloaded newer image for docker.xuanyuan.run/library/mariadb:11.4.13 docker.xuanyuan.run/library/mariadb:11.4.13IMAGE DISK USAGE CONTENT SIZE docker.xuanyuan.run/dolibarr/dolibarr:22.0.5 1.33GB 319MB docker.xuanyuan.run/library/mariadb:11.4.13 455MB 108MB三、Docker Compose 部署(主路径)
按这个顺序做:
- 建立目录。
- 写入
compose.yaml。 - 执行
docker compose up -d。 - 等待自动安装完成。
- 在浏览器登录。
开始之前确认:
- 数据目录使用
/www/wwwroot/dolibarr。 - 宿主机端口使用8088,容器端口是80。本机80上若已有面板或 Nginx,使用 8088 可以避开冲突。
- 应用镜像使用
dolibarr/dolibarr:22.0.5。数据库镜像使用 MariaDB11.4.13。
3.1 准备目录
在 Linux 上使用/www/wwwroot/dolibarr。
在 macOS 上,把同一路径换成~/docker/dolibarr。
chown的数字改成id -u和id -g的结果。
sudomkdir-p/www/wwwroot/dolibarr/{mariadb,documents,custom}sudochown-R1000:1000 /www/wwwroot/dolibarr/documents /www/wwwroot/dolibarr/customcd/www/wwwroot/dolibarr| 宿主机目录 | 容器路径 | 用途 |
|---|---|---|
./mariadb | /var/lib/mysql | 数据库 |
./documents | /var/www/documents | 附件与install.lock |
./custom | /var/www/html/custom | 外部模块 |
3.2 写入 compose.yaml
写入文件之前,把DOLI_URL_ROOT改成你的访问地址,地址里要带端口。下文局域网示例是http://192.168.1.35:8088。
cd/www/wwwroot/dolibarrcat>compose.yaml<<'EOF' services: mariadb: image: docker.xuanyuan.run/library/mariadb:11.4.13 container_name: dolibarr-mariadb restart: unless-stopped environment: MYSQL_ROOT_PASSWORD: change-me-root-pass MYSQL_DATABASE: dolidb MYSQL_USER: dolidbuser MYSQL_PASSWORD: change-me-db-pass volumes: - ./mariadb:/var/lib/mysql healthcheck: test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"] interval: 10s timeout: 5s retries: 10 web: image: docker.xuanyuan.run/dolibarr/dolibarr:22.0.5 container_name: dolibarr-web restart: unless-stopped depends_on: mariadb: condition: service_healthy environment: DOLI_INSTALL_AUTO: "1" DOLI_INIT_DEMO: "0" DOLI_PROD: "1" DOLI_DB_HOST: mariadb DOLI_DB_NAME: dolidb DOLI_DB_USER: dolidbuser DOLI_DB_PASSWORD: change-me-db-pass DOLI_URL_ROOT: "http://192.168.1.35:8088" DOLI_ADMIN_LOGIN: admin DOLI_ADMIN_PASSWORD: change-me-admin-pass DOLI_COMPANY_NAME: "MyCompany" DOLI_COMPANY_COUNTRYCODE: "CN" DOLI_CRON: "0" WWW_USER_ID: "1000" WWW_GROUP_ID: "1000" PHP_INI_DATE_TIMEZONE: "Asia/Shanghai" PHP_INI_MEMORY_LIMIT: "256M" ports: - "8088:80" volumes: - ./documents:/var/www/documents - ./custom:/var/www/html/custom EOF要点:
DOLI_DB_PASSWORD必须与MYSQL_PASSWORD相同。- 首次安装时,安装程序使用
DOLI_ADMIN_LOGIN和DOLI_ADMIN_PASSWORD创建管理员。 - 上线之前,把管理员密码改成强密码。
- 登录之后,再在页面里修改一次管理员密码。
- 正式环境把
DOLI_INIT_DEMO保持为0。 - 需要演示数据时,才把
DOLI_INIT_DEMO设为1。安装程序会灌入演示数据。 - 需要定时任务时,把
DOLI_CRON设为1。 - 启用定时任务时,写入
DOLI_CRON_KEY。
3.3 启动并查看状态
在/www/wwwroot/dolibarr按顺序执行下面的命令。
cd/www/wwwroot/dolibarrdockercompose up-ddockercomposepsdockercompose logs-fweb[+] up 3/3 ✔ Network dolibarr_default Created ✔ Container dolibarr-mariadb Healthy ✔ Container dolibarr-web StartedNAME IMAGE STATUS PORTS dolibarr-mariadb docker.xuanyuan.run/library/mariadb:11.4.13 Up … (healthy) 3306/tcp dolibarr-web docker.xuanyuan.run/dolibarr/dolibarr:22.0.5 Up … 0.0.0.0:8088->80/tcpMariaDB 约46 s变为healthy之后,Web 容器才会启动。
logs -f web摘录(中间建表日志已省略):
docker-run.sh started Current Version of files is : 22.0.5 DOLI_INSTALL_AUTO is on, so we check to initialize or upgrade mariadb database No table found, we launch initializeDatabase Importing table from llx_accounting_account.sql ... ... Create SuperAdmin account ... Activating module User... OK Configuring for country : 9:CN:China Database Version is : 22.0.5 Files Version are : 22.0.5 Schema update is not required ... Enjoy ! *** You can connect to the running Dolibarr web application with: http://127.0.0.1:port Apache/2.4.68 (Debian) configured -- resuming normal operations首次启动会导入大量llx_*.sql,可能持续数分钟。
日志出现就绪句之后,再打开浏览器。
日志出现You can connect to the running Dolibarr web application,并且 Apache 已就绪之后,按Ctrl+C停止跟随日志。
mkdir … conf: File exists和AH00558可以忽略。
说明见下文 FAQ。
在宿主机检查首页响应:
curl-sIhttp://127.0.0.1:8088/|head-n5HTTP/1.1 200 OK Date: Thu, 24 Sep 2026 07:15:53 GMT Server: Apache Set-Cookie: DOLSESSID_…=…; path=/; HttpOnly; SameSite=Lax Expires: Thu, 19 Nov 1981 08:52:00 GMT四、浏览器初始化
打开页面前,把示例地址中的 IP 换成你的 IP 或域名。
管理员用户名是admin。
密码使用 Compose 中的DOLI_ADMIN_PASSWORD。
本文示例值是change-me-admin-pass。
在第 9 步修改管理员密码之前,示例密码仍然可以登录。
打开
http://192.168.1.35:8088。使用用户名
admin登录。
自动安装已经启用用户模块。
其他模块启用之前,侧栏不会出现对应菜单。
打开「设置」。
页面会提示完善「公司 / 组织」,并启用模块。
打开「公司 / 组织」。
核对公司名和国家。本文实测国家为China / CN。
主币种仍是欧元时,把主币种改为人民币并保存。
打开「模块 / 应用」。
按需要启用模块,例如「第三方」(客户)、「商业提案 / 发票」、「产品与库存」,或人事中的「费用报销」和「休假」。
打开「主题 → 语言和呈现」。
浏览器已经是中文时,语言保持「自动检测」。
修改管理员密码。
核对浏览器地址栏与
DOLI_URL_ROOT是否一致。
地址不一致时,生成的链接会错。
五、功能演示
「我的看板」汇总逾期、报销、休假等卡片。新装后的账号多为 SuperAdmin,业务计数为 0。
启用人事相关模块之后,顶栏会出现「人事管理」。
新装时,费用报销和休假列表为空。这是正常现象。
可以从「+」新建一张单据,确认页面能打开。
销售和库存可以按下面的顺序做:
- 启用「第三方」等模块。
- 新建客户或供应商。
- 创建报价或订单。
- 开发票。
「产品与库存」模块启用之后,再维护产品和出入库。
合同和 PDF 等附件写在documents卷中。
备份时,把documents、mariadb、custom一起打包。
更细的模块说明见 Dolibarr Wiki。
六、备选:docker run
这一节只用于临时试玩。
第三节的 Compose 已经在运行时,先在/www/wwwroot/dolibarr执行docker compose down。
不先停止时,容器名会冲突。
先启动 MariaDB。
数据库就绪之后(约数十秒),再启动 Web 容器。
sudomkdir-p/www/wwwroot/dolibarr/{mariadb,documents,custom}sudochown-R1000:1000 /www/wwwroot/dolibarr/documents /www/wwwroot/dolibarr/customdockernetwork create dolibarr-netdockerrun-d--namedolibarr-mariadb--networkdolibarr-net--restartunless-stopped-eMYSQL_ROOT_PASSWORD=change-me-root-pass-eMYSQL_DATABASE=dolidb-eMYSQL_USER=dolidbuser-eMYSQL_PASSWORD=change-me-db-pass-v/www/wwwroot/dolibarr/mariadb:/var/lib/mysql docker.xuanyuan.run/library/mariadb:11.4.13# 等数据库就绪后再启动 Web(约数十秒)dockerrun-d--namedolibarr-web--networkdolibarr-net--restartunless-stopped-p8088:80-eDOLI_INSTALL_AUTO=1-eDOLI_DB_HOST=dolibarr-mariadb-eDOLI_DB_NAME=dolidb-eDOLI_DB_USER=dolidbuser-eDOLI_DB_PASSWORD=change-me-db-pass-eDOLI_URL_ROOT=http://192.168.1.35:8088-eDOLI_ADMIN_LOGIN=admin-eDOLI_ADMIN_PASSWORD=change-me-admin-pass-eDOLI_COMPANY_NAME=MyCompany-eDOLI_COMPANY_COUNTRYCODE=CN-eWWW_USER_ID=1000-eWWW_GROUP_ID=1000-v/www/wwwroot/dolibarr/documents:/var/www/documents-v/www/wwwroot/dolibarr/custom:/var/www/html/custom docker.xuanyuan.run/dolibarr/dolibarr:22.0.5dockerps--filtername=dolibarrdockerlogs--tail100dolibarr-web七、常见问题
为什么不用latest?latest在拉取时会换成当时的新镜像,界面和迁移步骤可能与本文不一致。
本文命令使用22.0.5。
升级之前,先备份mariadb、documents、custom。
然后再修改应用镜像标签。
为什么宿主机是 8088?
容器内监听80。
宿主机80经常被 Nginx 或宝塔占用。
宿主机80空闲时,可以把映射改成"80:80"。
改端口之后,把DOLI_URL_ROOT改成同一个地址。
和tuxgasy/dolibarr有什么区别?
社区镜像曾常用tuxgasy/dolibarr。
本文使用官方镜像dolibarr/dolibarr(见 dolibarr-docker)。
不要让两套镜像共用同一份documents或数据库目录。
和 Odoo / ERPNext 怎么选?
Dolibarr 更轻,模块可以逐个打开,适合中小团队先完成销售和库存。
Odoo 和 ERPNext 的功能通常更多,学习和运维成本也更高。
按团队规模选择。
不要把 Odoo 或 ERPNext 和本文的 Compose 部署混在一起。
国家选了 China,主币种仍是欧元?
自动安装会写入国家代码。
主币种仍可能保持默认的欧元。
打开「公司 / 组织」。
把主币种改为人民币或你需要的币种,并保存。
页面空白或安装很久?
现象是页面空白,或首次安装长时间没有完成。
先查看docker compose logs web和docker compose logs mariadb。
数据库未就绪、DOLI_DB_PASSWORD与MYSQL_PASSWORD不一致、documents目录权限不对,都会让安装停住。
首次启动会导入数百个 SQL 文件,可能要数分钟。
日志出现就绪句,并且 Apache 已启动之后,再打开页面。
日志里mkdir: … conf: File exists?
安装脚本会尝试创建已经存在的conf目录。
这条日志可以忽略。
日志里AH00558/ ServerName?
这是 Apache 没有设置全局ServerName时的提示。
这条日志可以忽略。
要去掉这条提示时,按上游说明挂载servername.conf。
升级大版本怎么做?
升级前先选定迁移方式。
保持DOLI_INSTALL_AUTO=1时,安装程序会自动迁移数据库。
也可以打开/install,使用网页向导升级。
- 备份
mariadb、documents、custom。 - 删除
documents/install.lock。 - 修改 Compose 中的应用镜像标签。
- 执行
docker compose pull && docker compose up -d。
如何启用演示数据?
只在首次安装之前把DOLI_INIT_DEMO设为1。
数据库已经创建之后,再改这个变量,不会补进演示数据。
可以用 PostgreSQL 吗?
本文主路径使用 MariaDB。
若改用 PostgreSQL,官方要求首次安装打开网页/install。
install.lock需要自行维护。
把DOLI_DB_TYPE设为pgsql。
再把数据库连接改到 PostgreSQL。
密码能否用 Docker Secrets?
部分变量支持_FILE后缀,例如DOLI_DB_PASSWORD_FILE。
写法见上游 with-secrets。
八、命令速查
# 拉取dockerpull docker.xuanyuan.run/dolibarr/dolibarr:22.0.5dockerpull docker.xuanyuan.run/library/mariadb:11.4.13# Composecd/www/wwwroot/dolibarrdockercompose up-ddockercomposepsdockercompose logs-fwebdockercompose down# 探测curl-sIhttp://127.0.0.1:8088/|head-n5九、延伸阅读
| 资源 | 链接 |
|---|---|
| dolibarr/dolibarr 镜像页 | https://xuanyuan.cloud/r/dolibarr/dolibarr |
| 标签列表 | https://xuanyuan.cloud/r/dolibarr/dolibarr/tags |
| GitHub · Dolibarr/dolibarr-docker | https://github.com/Dolibarr/dolibarr-docker |
| GitHub · dolibarr/dolibarr | https://github.com/dolibarr/dolibarr |
| Docker Hub · dolibarr/dolibarr | https://hub.docker.com/r/dolibarr/dolibarr |
| Dolibarr 官网 | https://www.dolibarr.org/ |
| Dolibarr Wiki | https://wiki.dolibarr.org/ |
| 轩辕镜像使用手册 | https://xuanyuan.cloud/usage |
阅读原文
- 轩辕镜像官方博客:https://xuanyuan.cloud/blog/dolibarr-docker-deploy