Docker 部署 Apache Doris 完整教程:快速搭建 OLAP 数据库
2026/7/22Docker部署教程轩辕镜像团队26 分钟阅读

Docker 部署 Apache Doris 完整教程:快速搭建 OLAP 数据库

业务看板要秒级刷新、运营要按用户/订单做多维下钻,用传统行存库扛聚合又慢又贵;把整仓扔公有云分析服务,又担心成本与数据出境——很多团队会把目光投向可自托管的实时数仓,Apache Doris 正是为此而生。

本文使用的 Docker 镜像

本文基于 apache/doris 官方运行时镜像 fe-4.1.3 + be-4.1.3正文默认 Linux(host 网络);另设 macOS bridge 专节。Compose 与验证命令可直接复用。

业务看板要秒级刷新、运营要按用户/订单做多维下钻,用传统行存库扛聚合又慢又贵;把整仓扔公有云分析服务,又担心成本与数据出境——很多团队会把目光投向可自托管的实时数仓。Apache Doris 正是为此而生:它是 Apache 软件基金会旗下的开源 MPP 实时分析型数据库,以「极致速度 + 易用」为卖点——在海量数据上常能做到亚秒级查询响应,同一套系统既能扛高并发点查(如按主键查明细、画像),也能做高吞吐复杂分析(多表 Join、宽表聚合、实时报表)。对运维与研发更友好的是:它高度兼容 MySQL 协议与 ANSI SQL 风格,现有的 mysql 客户端、JDBC、DBeaver、各类 BI 往往改连接串就能用;内置 FE Web(默认 8030)可直接写 SQL、看节点与日志,不必先搭一整套外围工具。

架构上 Doris 把职责拆成 FE(Frontend)BE(Backend):FE 负责接收 SQL、解析规划、管理元数据与节点;BE 负责数据存储与计算执行。生产可多 FE / 多 BE 做高可用,本文用 Docker 先跑通最小形态——1 FE + 1 BE。存算一体之外,新版本也支持存算分离等架构,可按业务规模再演进。典型落地包括:对内/对外实时大盘、用户行为与漏斗分析、A/B 实验、日志与可观测分析,以及湖仓联邦查询加速等。

本文用 轩辕镜像 加速,在 Linux 上用 Docker Compose 拉起 1 FE + 1 BE:固定标签、验证集群 Alive,再用 Web(8030)MySQL 协议(9030) 建库查数。

镜像页见 apache/doris,官方快速入门见 Doris Quick Start,项目主页 doris.apache.org、仓库 apache/doris

定位说明:官方明确 Docker Quick Start 偏 本地开发 / 体验;默认 Compose 未挂数据卷docker compose down 后数据可能丢失。生产请按官方「本地完整部署」或多节点方案规划。


一、Apache Doris 是什么?

Apache Doris 是基于 MPP 架构的开源实时分析型数据库,以极致速度与易用性著称:海量数据下可提供亚秒级查询,同时覆盖高并发点查与高吞吐复杂分析。高度兼容 MySQL 协议,可用 mysql 客户端、JDBC、DBeaver 等直接连接。

能力说明
MPP + 向量化FE 管元数据与规划,BE 存算执行
MySQL 协议默认查询端口 9030,学习成本低
Web UIFE 8030 内置登录、Playground、System、Log 等
场景实时报表、用户行为、湖仓加速、日志与可观测分析

架构示意(本文单机 1 FE + 1 BE):

text
浏览器 ──HTTP:8030──▶  FE(元数据 / SQL 入口)
mysql / DBeaver ──MySQL:9030──▶  FE
FE ──心跳 / 调度──▶  BE(存储与计算)

1.1 标签怎么选(必看)

apache/doris 不是 一个 latest 就能跑,标签按角色拆分:

标签前缀用途本文是否使用
fe-x.y.zFrontendfe-4.1.3
be-x.y.zBackendbe-4.1.3,与 FE 同版本
broker-x.y.z外部存储 Broker快速体验不需要
ms-x.y.z存算分离 MetaService不需要
operator-x.y.zK8s Operator不需要
build-env-*源码编译环境,不能当运行时不要
*-latest浮动标签文稿 / 复现 不推荐

更多标签见 标签列表

1.2 Doris 和 ClickHouse 有什么区别?

两者都是主流 OLAP,但定位不同:

Apache DorisClickHouse
架构MPP,FE + BE 分角色,偏「一套数据库产品」单节点即可很强,也可分片;偏「分析引擎」
SQL / 接入高度兼容 MySQL 协议,BI / JDBC 几乎开箱自有协议 + HTTP;也有 MySQL 兼容层,习惯不同
典型场景实时报表、高并发点查 + 复杂分析、湖仓、面向业务的实时数仓日志 / 埋点 / 指标海量写入与宽表聚合、可观测
更新Unique / Aggregate 等模型,行级更新相对友好偏追加写;更新删除有代价,近年在加强
Docker 形态至少 两个镜像(fe + be)一个容器 就能玩

怎么选:

  • 要 MySQL 兼容、报表 / BI、点查与分析一体、团队更熟关系库 → 优先 Doris
  • 要日志指标狂写狂聚合、单机压榨吞吐 → 优先 ClickHouse
  • 可并存:ClickHouse 扛流水,Doris 做面向业务的实时数仓。本仓库另有 ClickHouse Docker 部署教程

二、环境要求

项目建议
操作系统Linux x86_64(正文默认;Ubuntu 等均可)
DockerDocker Engine + Compose V2docker compose
内存建议 ≥ 8 GB 可用(FE+BE 同机体验)
CPUamd64 必须支持 AVX2(约 Intel 4 代 Haswell / 2013 年后常见 i5 多数支持)
磁盘镜像合计数 GB 级 + 数据增长
端口8030(FE Web)、9030(MySQL)、另有 9010/9050 等集群内部端口
工作目录/data/doris(示例)
bash
docker --version
docker compose version

未装 Docker 可用轩辕一键脚本:

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

更多见 轩辕镜像使用手册

2.1 部署前自检 AVX2(强烈建议)

官方说明:amd64 运行时镜像 仅支持带 AVX2 的 CPU;无 AVX2 需按 Doris docker/runtime 自建镜像。

bash
grep -o 'avx2' /proc/cpuinfo | head -1 || echo 'AVX2 NOT found'
结果说明
avx2可继续拉取与启动
AVX2 NOT found不要硬启动官方 fe/be;换机或自建 no-avx2 镜像

三、拉取镜像

本文固定成对标签 fe-4.1.3 + be-4.1.3。不要拉 build-env-*

bash
docker pull docker.xuanyuan.run/apache/doris:fe-4.1.3
docker pull docker.xuanyuan.run/apache/doris:be-4.1.3

实测完整输出(节选):

text
fe-4.1.3: Pulling from apache/doris
…
Digest: sha256:3dd47644cd9fa8152028bdae449e77170ab0de004bd7a3fa311a204a106c26c7
Status: Downloaded newer image for docker.xuanyuan.run/apache/doris:fe-4.1.3
docker.xuanyuan.run/apache/doris:fe-4.1.3

be-4.1.3: Pulling from apache/doris
…
Digest: sha256:9f84a8b018069cd3c9a65af42ff5ef2c733b3b25e1ca708e0a3e4078361a1eb3
Status: Downloaded newer image for docker.xuanyuan.run/apache/doris:be-4.1.3
docker.xuanyuan.run/apache/doris:be-4.1.3

国内建议全程使用 docker.xuanyuan.run。需登录时见 登录认证说明


四、Linux 部署(正文默认)

与官方 start-doris.sh 在 Linux 上的行为一致:使用 network_mode: host,FE/BE 通过 127.0.0.1 互通。

4.1 创建目录与 compose 文件

bash
mkdir -p /data/doris
cd /data/doris
vim docker-compose.yml

内容:

yaml
services:
  fe:
    image: docker.xuanyuan.run/apache/doris:fe-4.1.3
    hostname: fe
    environment:
      - FE_SERVERS=fe1:127.0.0.1:9010
      - FE_ID=1
    network_mode: host
  be:
    image: docker.xuanyuan.run/apache/doris:be-4.1.3
    hostname: be
    environment:
      - FE_SERVERS=fe1:127.0.0.1:9010
      - BE_ADDR=127.0.0.1:9050
    depends_on:
      - fe
    network_mode: host
配置项说明
FE_SERVERSFE 列表,名称:IP:edit_log_port
FE_ID=1单 FE 场景固定为 1
BE_ADDR本机 BE 心跳地址 IP:9050
network_mode: hostLinux 下 FE/BE 共用宿主机网络栈,端口直接落在宿主机

不要把下文 macOS 的 172.20.80.x 配置抄到 Linux host 模式里混用。

4.2 启动

bash
docker compose up -d
docker compose ps
docker compose logs --tail=50

期望两个服务均为 Up。首次启动请 等待 1~2 分钟 再验证(FE/BE 注册与心跳需要时间)。


五、验证与使用(Linux)

5.1 MySQL 协议验证(9030)

本机已装 mysql 客户端时:

bash
mysql -uroot -P9030 -h127.0.0.1 -e 'SELECT `host`, `join`, `alive` FROM frontends()'
mysql -uroot -P9030 -h127.0.0.1 -e 'SELECT `host`, `alive` FROM backends()'

未安装客户端时,可用临时容器(建议轩辕拉取,避免直连 Docker Hub 超时):

bash
docker run --rm -it docker.xuanyuan.run/library/mysql:8.0 \
  mysql -uroot -P9030 -h127.0.0.1 \
  -e 'SELECT `host`, `join`, `alive` FROM frontends()'

docker run --rm -it docker.xuanyuan.run/library/mysql:8.0 \
  mysql -uroot -P9030 -h127.0.0.1 \
  -e 'SELECT `host`, `alive` FROM backends()'

library/mysql 坐标在你环境不可用,可试 docker.xuanyuan.run/mysql:8.0(实测可用)。

期望:FE 的 Join / Alivetrue;BE 的 Alive1(或 true,视版本输出而定)。

也可交互进入:

bash
mysql -uroot -P9030 -h127.0.0.1
# 或
docker run --rm -it docker.xuanyuan.run/mysql:8.0 \
  mysql -uroot -P9030 -h127.0.0.1
sql
SHOW FRONTENDS\G
SHOW BACKENDS\G

5.2 建库建表冒烟

sql
CREATE DATABASE demo;
USE demo;

CREATE TABLE mytable (
  k1 TINYINT,
  k2 DECIMAL(10, 2) DEFAULT "10.05",
  k3 CHAR(10),
  k4 INT NOT NULL DEFAULT "1"
)
DISTRIBUTED BY HASH(k1) BUCKETS 1
PROPERTIES ("replication_num" = "1");

INSERT INTO mytable VALUES
(1, 0.14, 'a1', 20),
(2, 1.04, 'b2', 21);

SELECT * FROM demo.mytable;

期望返回 2 行。单机体验请保持 replication_num = 1(只有一个 BE)。

5.3 默认账号与改密

用户root
初始密码(不填)
Webhttp://<服务器IP>:8030
MySQL<服务器IP>:9030

建议立刻改密(须在 MySQL 客户端执行;内置 Web 不能执行 SET 类语句):

sql
SET PASSWORD FOR 'root' = PASSWORD('你的强密码');

5.4 浏览器 Web UI(8030)

打开(把 IP 换成你的服务器):

text
http://<服务器IP>:8030/login

用户名 root,密码初始为空(若已改密则填新密码),点 Login

Doris Web 登录页 Username Password Login

图 1:FE Web 登录页(http://服务器IP:8030/login),默认 root / 空密码

登录后可在 System 查看版本与硬件信息(版本类似 doris-4.1.3-rc02):

Doris System 页显示版本 doris-4.1.3-rc02 与主机信息

图 2:System — 版本、主机名、内存与磁盘等环境信息

System 下还有类似 /procSystem Info 索引(frontendsbackendsdbs 等),便于点选查看集群状态:

Doris System Info 列出 backends frontends dbs 等入口

图 3:System Info — 集群诊断入口列表

打开 Playground,可在浏览器里写 SQL(左侧为库表树,中间为编辑器):

Doris Playground 空白 SQL 编辑器

图 4:Playground — 内置 SQL 编辑器

例如验证 FE 状态:

sql
SELECT host, join, alive FROM frontends()

执行成功后可见 Alive = true

Playground 执行 frontends 查询 Join Alive 均为 true

图 5:Playground 查询 frontends(),Join / Alive 为 true

Log 页可在线查看 FE 日志(路径类似 /opt/apache-doris/fe/log/fe.warn.log):

Doris Log 页查看 fe.warn.log

图 6:Log — 浏览器查看 FE 告警 / 错误日志

QueryProfile 可查看已完成查询画像(刚部署时常为空):

Doris QueryProfile Finished Queries 暂无数据

图 7:QueryProfile — 已完成查询列表(初期可为空)

Session 查看当前会话:

Doris Session Info 当前无活跃会话

图 8:Session — 会话列表

Configuration 可浏览 FE 配置项(条目很多,便于核对参数):

Doris Configuration 配置项列表

图 9:Configuration — FE 配置一览


六、macOS 部署(专节)

Docker Desktop(Mac)上 network_mode: host 基本不可用,请改用官方 Quick Start 同思路的 bridge + 固定 IP,并做端口映射。与 Linux 配置 不能混用

6.1 macOS Compose

yaml
networks:
  doris_net:
    driver: bridge
    ipam:
      config:
        - subnet: 172.20.80.0/24

services:
  fe:
    image: docker.xuanyuan.run/apache/doris:fe-4.1.3
    hostname: fe
    ports:
      - "8030:8030"
      - "9030:9030"
      - "9010:9010"
    environment:
      - FE_SERVERS=fe1:172.20.80.2:9010
      - FE_ID=1
    networks:
      doris_net:
        ipv4_address: 172.20.80.2

  be:
    image: docker.xuanyuan.run/apache/doris:be-4.1.3
    hostname: be
    ports:
      - "8040:8040"
      - "9050:9050"
    environment:
      - FE_SERVERS=fe1:172.20.80.2:9010
      - BE_ADDR=172.20.80.3:9050
    depends_on:
      - fe
    networks:
      doris_net:
        ipv4_address: 172.20.80.3
bash
docker compose up -d
# 等 1~2 分钟

6.2 macOS 验证差异

LinuxmacOS
网络host + 127.0.0.1bridge 172.20.80.0/24
FE / BE 地址127.0.0.1172.20.80.2 / 172.20.80.3
端口映射不需要需要
mysql 从容器连-h127.0.0.1常用 -hhost.docker.internal
Webhttp://127.0.0.1:8030 或局域网 IP同左(已映射 8030)
bash
docker run --rm -it docker.xuanyuan.run/mysql:8.0 \
  mysql -uroot -P9030 -hhost.docker.internal \
  -e 'SELECT `host`, `join`, `alive` FROM frontends()'

docker run --rm -it docker.xuanyuan.run/mysql:8.0 \
  mysql -uroot -P9030 -hhost.docker.internal \
  -e 'SELECT `host`, `alive` FROM backends()'

实测期望示例:FE host=172.20.80.2 且 Alive;BE host=172.20.80.3 且 Alive=1。Web 登录与 Playground 步骤同 §五(上文截图即在 macOS bridge 环境采集)。


七、日常运维

bash
cd /data/doris   # 或你的 compose 目录
docker compose ps
docker compose logs -f --tail=100
docker compose restart
docker compose down    # 停止;默认未挂卷时数据可能丢失
docker compose up -d

日常用法简述:

  1. docker compose up -d 启动
  2. 浏览器打开 http://IP:8030 写 SQL,或用 mysql / DBeaver 连 IP:9030
  3. 用完可 docker compose down

升级:同步改 FE/BE 镜像标签为同一版本 → docker compose pull && docker compose up -d


八、FAQ

Q:可以只拉一个镜像吗?
A:快速体验至少需要 成对的 fe-x.y.zbe-x.y.zbuild-env-* 是编译环境,不能当数据库跑。

Q:容器起来了但 BE Alive 一直不对?
A:多等 1~2 分钟;确认 FE/BE 同版本;Linux 用 host + 127.0.0.1,macOS 用 bridge 固定 IP,不要混用。看 FE Log(图 6)是否有 No backend available 一类报错。

Q:本机提示 zsh: command not found: mysql
A:未装客户端。用临时容器连接(见 §5.1 / §6.2),或 brew install mysql-client(macOS)。

Q:拉 mysql:8.0 超时?
A:国内请走轩辕,例如 docker.xuanyuan.run/mysql:8.0,勿直连 registry-1.docker.io

Q:Web 默认密码是什么?
A:root / 空密码。改密用 MySQL 客户端执行 SET PASSWORD;Web 不能执行 SET。

Q:CPU 是 i5 能跑吗?
A:关键是 有没有 AVX2,不是牌子。约 4 代及以后的桌面 i5 多数可以;用 §2.1 命令自检。

Q:Docker 部署适合生产吗?
A:官方认为 Quick Start Docker 不适合生产(易丢数据、单副本等)。生产请参考官方完整部署 / 多节点 / K8s Operator。

Q:和 ClickHouse 怎么选?
A:见 §1.2。需要 MySQL 协议与「数仓产品」体验偏 Doris;日志指标狂写偏 ClickHouse。


九、命令速查

bash
# 拉取
docker pull docker.xuanyuan.run/apache/doris:fe-4.1.3
docker pull docker.xuanyuan.run/apache/doris:be-4.1.3

# Linux 启动
cd /data/doris
docker compose up -d
docker compose ps

# 验证
mysql -uroot -P9030 -h127.0.0.1 -e 'SHOW FRONTENDS'
mysql -uroot -P9030 -h127.0.0.1 -e 'SHOW BACKENDS'

# Web
# http://<IP>:8030

# 停止
docker compose down

十、延伸阅读

评论交流

加载中

免责声明

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

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

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

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

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