Docker 部署 Dolibarr:轻松搭建开源 ERP/CRM 平台
2026/9/24Docker部署教程轩辕镜像团队26 分钟阅读

Docker 部署 Dolibarr:轻松搭建开源 ERP/CRM 平台

Dolibarr 是面向中小企业的开源 ERP 与 CRM 套件,可在浏览器里管客户、报价、发票与库存。本文将介绍如何通过 Docker Compose 部署官方镜像 dolibarr/dolibarr 并配套 MariaDB,用轩辕镜像加速拉取,适合内网自托管与小型团队私有化。

本文使用的 Docker 镜像

本文基于 dolibarr/dolibarr:22.0.5,以 22.0.5 版本实测,测试平台 Ubuntu 24.04 Linux。

小公司开报价单还在 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
DockerEngine + Compose V2
架构linux/amd64linux/arm6422.0.5 均有)
内存建议 ≥ 2 GB 空闲(Web + MariaDB)
磁盘应用 DISK 1.33 GB / CONTENT 319 MB;MariaDB DISK 455 MB / CONTENT 108 MB;业务数据另计
端口宿主机 8088 → 容器 80
工作目录/www/wwwroot/dolibarr
bash
docker --version
docker compose version

Linux 未装 Docker 可使用轩辕镜像一键安装脚本:

bash
bash <(wget -qO- https://get.xuanyuan.cloud/docker.sh)

备用地址:

bash
bash <(wget -qO- https://get.xuanyuan.me/docker.sh)

更多见 轩辕镜像使用手册


二、拉取镜像

2.1 标签怎么选

标签说明本文是否采用
22.0.522.x 较新的具体稳定版;amd64 / arm64采用
22.0.5-php8.222.0.5 同源,标明 PHP 8.2可等价选用
22.0.4 及更早旧补丁仅回退时用
develop开发线勿写入生产命令
latest浮动标签勿写入文中命令

完整列表见 标签页。升级时只改 Compose 里的应用标签,保留 mariadbdocumentscustom 三个目录,并处理 install.lock(见 FAQ)。

2.2 用轩辕镜像加速拉取

bash
docker pull docker.xuanyuan.run/dolibarr/dolibarr:22.0.5
docker pull docker.xuanyuan.run/library/mariadb:11.4.13

Ubuntu 24.04 实测:

text
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.5
text
11.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.13
text
IMAGE                                          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 → up -d → 等自动安装完成 → 浏览器登录

数据目录用 /www/wwwroot/dolibarr;宿主机映射 8088(避免与本机 80 上的面板 / Nginx 冲突);镜像固定 22.0.5 与 MariaDB 11.4.13

3.1 准备目录

bash
sudo mkdir -p /www/wwwroot/dolibarr/{mariadb,documents,custom}
sudo chown -R 1000:1000 /www/wwwroot/dolibarr/documents /www/wwwroot/dolibarr/custom
cd /www/wwwroot/dolibarr

macOS 把路径换成 ~/docker/dolibarrchown 数字与 id -u / id -g 一致。

宿主机目录容器路径用途
./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

bash
cd /www/wwwroot/dolibarr
cat > 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=1 才会灌演示数据;正式环境保持 0
  • 需要定时任务时设 DOLI_CRON=1,并配置 DOLI_CRON_KEY

3.3 启动并查看状态

bash
cd /www/wwwroot/dolibarr
docker compose up -d
docker compose ps
docker compose logs -f web

实测:MariaDB 约 46 s 变为 healthy 后 Web 才启动。首次会导入大量 llx_*.sql,可能持续数分钟,等日志出现就绪句再开浏览器。

text
[+] up 3/3
 ✔ Network dolibarr_default   Created
 ✔ Container dolibarr-mariadb Healthy
 ✔ Container dolibarr-web     Started
text
NAME               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/tcp

logs -f web 摘录(中间建表日志已省略):

text
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

出现 You can connect to the running Dolibarr web application 且 Apache 已就绪后,Ctrl+C 退出跟随即可。mkdir … conf: File existsAH00558 可忽略(见 FAQ)。

bash
curl -sI http://127.0.0.1:8088/ | head -n 5
text
HTTP/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

四、浏览器初始化

打开 http://192.168.1.35:8088(换成你的 IP 或域名)。用 Compose 里的管理员登录:用户名 admin,密码为 DOLI_ADMIN_PASSWORD(示例 change-me-admin-pass)。

登录后先到「设置」:页面会提示完善公司 / 组织,并启用模块——侧栏菜单要等对应模块打开后才会出现。

在「公司 / 组织」核对公司名、国家(本文为 China / CN)等。主币种若仍是欧元,可按本地业务改成人民币后保存。

再到「模块 / 应用」按需打开:例如第三方(客户)、商业提案 / 发票、产品与库存,或人事里的费用报销、休假。用户模块在自动安装时已启用。

「主题 → 语言和呈现」可调默认语言;浏览器已是中文时,保持「自动检测」即可。

最后立刻改管理员密码,并确认地址栏与 DOLI_URL_ROOT 一致,避免生成错误链接。


五、功能演示

「我的看板」汇总逾期、报销、休假等卡片;新装多为 SuperAdmin,业务计数为 0。

启用人事相关模块后,顶栏会出现「人事管理」。费用报销、休假列表在新装时为空属正常——可从「+」新建单据做冒烟。

销售与库存侧常见路径:启用「第三方」等模块后,新建客户 / 供应商 → 报价或订单 → 发票;库存模块打开后再维护产品与出入库。合同、PDF 等附件落在 documents 卷,备份时连同 mariadbcustom 一起打包即可。

更细模块说明见 Dolibarr Wiki


六、备选:docker run

仅适合临时试玩。若已按第三节 Compose 在跑,先 docker compose down,避免容器名冲突。

bash
sudo mkdir -p /www/wwwroot/dolibarr/{mariadb,documents,custom}
sudo chown -R 1000:1000 /www/wwwroot/dolibarr/documents /www/wwwroot/dolibarr/custom

docker network create dolibarr-net

docker run -d \
  --name dolibarr-mariadb \
  --network dolibarr-net \
  --restart unless-stopped \
  -e MYSQL_ROOT_PASSWORD=change-me-root-pass \
  -e MYSQL_DATABASE=dolidb \
  -e MYSQL_USER=dolidbuser \
  -e MYSQL_PASSWORD=change-me-db-pass \
  -v /www/wwwroot/dolibarr/mariadb:/var/lib/mysql \
  docker.xuanyuan.run/library/mariadb:11.4.13

# 等数据库就绪后再启动 Web(约数十秒)
docker run -d \
  --name dolibarr-web \
  --network dolibarr-net \
  --restart unless-stopped \
  -p 8088:80 \
  -e DOLI_INSTALL_AUTO=1 \
  -e DOLI_DB_HOST=dolibarr-mariadb \
  -e DOLI_DB_NAME=dolidb \
  -e DOLI_DB_USER=dolidbuser \
  -e DOLI_DB_PASSWORD=change-me-db-pass \
  -e DOLI_URL_ROOT=http://192.168.1.35:8088 \
  -e DOLI_ADMIN_LOGIN=admin \
  -e DOLI_ADMIN_PASSWORD=change-me-admin-pass \
  -e DOLI_COMPANY_NAME=MyCompany \
  -e DOLI_COMPANY_COUNTRYCODE=CN \
  -e WWW_USER_ID=1000 \
  -e WWW_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.5
bash
docker ps --filter name=dolibarr
docker logs --tail 100 dolibarr-web

七、常见问题

为什么不用 latest
浮动标签会静默更新,界面与迁移步骤可能和文档脱节。正文使用 22.0.5;升级时主动改标签并先备份。

为什么宿主机是 8088?
容器内监听 80;宿主机 80 常被 Nginx、宝塔占用。空闲时可改 "80:80",并同步改 DOLI_URL_ROOT

tuxgasy/dolibarr 有什么区别?
社区曾常用 tuxgasy/dolibarr;本文用官方坐标 dolibarr/dolibarr(见 dolibarr-docker)。两套不要共用同一份 documents / 库目录。

和 Odoo / ERPNext 怎么选?
Dolibarr 更轻,模块可逐步打开,适合中小团队先跑通销售与库存。Odoo / ERPNext 能力面通常更广,学习与运维成本也更高。按团队规模选型即可,不要和本文 Compose 混部。

国家选了 China,主币种仍是欧元?
自动安装会写入国家代码,币种仍可能保持默认欧元。到「公司 / 组织」改成人民币(或所需币种)后保存。

页面空白或安装很久?
docker compose logs web / mariadb:库未就绪、密码不一致、documents 权限不对都会卡住。首次冷启动导入数百个 SQL,可能要数分钟;等就绪句与 Apache 起来再访问。

日志里 mkdir: … conf: File exists
脚本尝试创建已存在的 conf,可忽略。

日志里 AH00558 / ServerName?
Apache 未设全局 ServerName 的提示,可忽略;要消除可按上游说明挂载 servername.conf

升级大版本怎么做?

  1. 备份 mariadbdocumentscustom
  2. 删除 documents/install.lock
  3. 改 Compose 镜像标签后:docker compose pull && docker compose up -d
  4. 保持 DOLI_INSTALL_AUTO=1 自动迁移,或访问 /install 向导升级

如何启用演示数据?
仅首次安装前设 DOLI_INIT_DEMO=1。库已建好后,改环境变量不会补灌演示数据。

可以用 PostgreSQL 吗?
DOLI_DB_TYPE=pgsql 并改连 PostgreSQL。官方要求首次走网页 /install,并自行维护 install.lock。本文主路径用 MariaDB。

密码能否用 Docker Secrets?
部分变量支持 _FILE 后缀(如 DOLI_DB_PASSWORD_FILE),见上游 with-secrets


八、命令速查

bash
# 拉取
docker pull docker.xuanyuan.run/dolibarr/dolibarr:22.0.5
docker pull docker.xuanyuan.run/library/mariadb:11.4.13

# Compose
cd /www/wwwroot/dolibarr
docker compose up -d
docker compose ps
docker compose logs -f web
docker compose down

# 探测
curl -sI http://127.0.0.1:8088/ | head -n 5

九、延伸阅读


阅读原文

评论交流

加载中

免责声明

本博客文章所提供的内容、技术方案、配置示例及部署指南等信息,仅供学习交流和技术参考使用。文章内容基于发布时的技术环境和版本信息编写,可能因时间推移、技术更新或环境差异而存在不适用的情况。

用户在参考本博客内容进行部署操作前,应当充分了解相关技术风险,并建议在测试环境中进行充分验证和测试,确认无误后再考虑在生产环境中使用。生产环境部署前,请务必进行数据备份,并制定相应的回滚方案。

用户因使用本博客内容进行部署操作而产生的任何损失、数据丢失、系统故障、安全风险或其他问题,均由用户自行承担全部责任。轩辕镜像官方不对因使用本博客内容而产生的任何直接或间接损失承担责任。

本免责声明的最终解释权归轩辕镜像官方所有。

最后更新:2026/9/24
专业版 · 高速稳定拉取镜像
50GB 仅 ¥8/年
高速镜像下载在线技术支持99.95% SLA 保障付费会员免广告