CentOS 7 上 Docker 部署 OpenMetadata 元数据平台实战

发布时间:2026/10/20 15:05:17
CentOS 7 上 Docker 部署 OpenMetadata 元数据平台实战
简介这份资源是面向运维工程师、数据平台开发者及系统管理员的 OpenMetadata 安装手册以 doc 文档形式呈现聚焦于通过 Docker 方式快速部署这一开源一站式元数据管理平台。OpenMetadata 覆盖数据发现、数据血缘、数据质量、数据探查、数据治理与团队协作等能力可帮助企业更好地理解和管理数据资产而容器化部署正是其落地的高效路径。资源包共 1 个文件为 1 个 doc 文档整体约 693KB内容围绕 CentOS 7 环境准备、Docker 与 Docker Compose 安装、docker-compose.yml 下载与配置修改、服务启动及首页访问等环节展开并涉及镜像拉取失败时的替代思路、容器网络与存储等进阶配置。目前已有 1353 人学习下载适合具备一定 Docker 基础、希望快速搭建元数据管理平台的读者参考也可作为版本差异排查与社区求助的辅助材料。1. 从一台干净的 CentOS 7 说起OpenMetadata 到底解决了什么问题很多团队的数据资产散落在 Hive、MySQL、Kafka、ClickHouse 里表名靠口口相传字段含义靠翻建表语句血缘关系靠猜。OpenMetadata 就是冲着这个场景来的——它把元数据采集、数据血缘、数据质量、数据探查、数据治理和团队协作揉进一个平台用一套统一的元数据模型把散落各处的资产串起来。你可以在上面看到一张表从哪来、被谁用、字段什么含义、最近一次质量校验是否通过。这份手册讲的是用 Docker 方式把它跑起来。相比源码编译或者 K8s 编排Docker Compose 方案对一台单机 CentOS 7 最友好装好 Docker 和 Docker Compose拉一份官方编排文件改几个密码和端口一条命令拉起整套服务。适合已经熟悉容器化部署的开发者、数据平台运维以及想先在本机验证元数据管理能力再决定要不要上生产的团队。下面按环境准备、Docker 安装、Compose 安装、编排文件下载与修改、启动验证的顺序走一遍中间穿插我踩过的坑。2. 环境准备与 Docker 安装别让镜像源拖垮你2.1 基础环境清单与版本边界这套方案对操作系统的要求不高CentOS 7 就够但几个依赖的版本要心里有数。Docker 用社区版 docker-ceDocker Compose 走 Python3 的 pip 安装路径所以 Python3 和 pip 必须先到位。JDK 在部分采集场景会用到提前装好省得后面补。组件建议版本用途CentOS7.x宿主机操作系统Dockerdocker-ce 最新稳定版容器运行时Docker Compose1.29.xpip 安装服务编排Python33.6.8 及以上支撑 docker-composeJDK1.8 及以上部分采集器依赖资源方面OpenMetadata 整套服务包含 MySQL、Elasticsearch、OpenMetadata Server、Ingestion 等多个容器内存建议不低于 8GB磁盘预留 20GB 以上。我见过在 4GB 内存的测试机上硬跑Elasticsearch 反复被 OOM Killer 干掉容器起来又挂排查半天才发现是内存不够。2.2 安装 Docker 与配置镜像源先装基础依赖再挂载 Docker 的 yum 源。这里用国内镜像源替换官方源否则拉包速度会让你怀疑人生。# 安装 yum 工具和存储驱动依赖 yum install -y yum-utils device-mapper-persistent-data lvm2 --skip-broken # 添加 Docker CE 的 yum 源使用国内镜像 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 将源文件中的官方地址替换为国内镜像地址 sed -i s/download.docker.com/mirrors.aliyun.com\/docker-ce/g /etc/yum.repos.d/docker-ce.repo # 刷新 yum 缓存 yum makecache fastyum-utils提供yum-config-manager命令device-mapper-persistent-data和lvm2是 Docker 存储驱动的底层依赖。sed那行是把 repo 文件里所有download.docker.com替换成阿里云镜像地址避免后续安装时走官方源超时。yum makecache fast重建缓存让新源立即生效。源配好后安装并启动 Docker# 安装 Docker CE yum install -y docker-ce # 启动 Docker 服务 sudo systemctl start docker # 设置开机自启 sudo systemctl enable docker # 验证版本和基本信息 docker -v docker infodocker info除了看版本还要留意Storage Driver和Cgroup Driver两项。CentOS 7 默认可能是overlay2如果显示devicemapper且 loop 设备性能会差很多建议在/etc/docker/daemon.json里显式指定overlay2。另外docker info报错Cannot connect to the Docker daemon时先确认systemctl status docker是不是 active多半是服务没起来或者 socket 权限问题。提示如果docker info输出里WARNING: No swap limit support需要在 grub 里加cgroup_enablememory swapaccount1并重启否则容器内存限制不生效。3. Docker Compose 安装Python3 是绕不开的前置3.1 为什么 Compose 依赖 Python3Docker Compose 早期版本是一个 Python 脚本通过 pip 分发所以必须先有 Python3 和 pip。虽然现在 Docker 官方推荐用 Compose V2 插件docker compose子命令但这套手册的编排文件是按 V1 的docker-compose命令写的两条路都能走这里按手册的 pip 路径来。# 安装 Python3 及开发库 yum install -y python3 python3-devel python3-libs python3-tools # 确保 pip 可用 python3 -m ensurepip # 升级 pip 到较新版本 python3 -m pip install --upgrade pip # 验证 Python3 版本 python3 -Vpython3-devel和python3-libs是编译某些 pip 包时的头文件和库依赖缺了会在安装 docker-compose 时报gcc或Python.h找不到。ensurepip是兜底有些精简版 CentOS 的 Python3 不带 pip这一步能补上。python3 -V输出类似Python 3.6.8就说明基础环境 OK。3.2 安装 docker-compose 并验证# 通过 pip 安装 docker-compose pip install docker-compose # 验证安装 docker-compose -v如果pip install卡在下载或者报 SSL 错误常见做法是加国内 pip 源pip install docker-compose -i https://pypi.tuna.tsinghua.edu.cn/simpledocker-compose -v输出docker-compose version 1.29.x就说明装好了。这里有个坑如果系统里同时存在 Python2 和 Python3pip可能指向 Python2装出来的 docker-compose 跑不起来。用pip -V确认它绑定的 Python 版本不对就用python3 -m pip install docker-compose显式指定。注意Docker Compose V1 在较新系统上已停止维护如果docker-compose命令报语法错误或兼容性警告可以改用docker composeV2 插件编排文件本身兼容。4. 编排文件下载与配置修改密码和端口是重灾区4.1 获取 docker-compose.yml 的两种路径官方在 GitHub Release 里提供了打包好的docker-compose.yml直接 wget 下载即可。但国内网络访问 GitHub Release 经常断连这时候别死磕命令行浏览器打开 Release 页面手动下载再传到服务器上。# 创建独立目录避免和别的项目混在一起 mkdir openmetadata-docker cd openmetadata-docker # 下载对应版本的 docker-compose.yml wget https://github.com/open-metadata/OpenMetadata/releases/download/1.5.6-release/docker-compose.yml目录单独建是有必要的因为 Compose 启动时会在当前目录生成数据卷挂载点混在别的项目里容易误删。下载完成后先ls -lh看文件大小正常是几十 KB如果只有几 KB 多半是下载到了错误页面比如 GitHub 的 404 HTML打开看一眼开头是不是version:就知道。4.2 必须改的几处配置编排文件里默认的密码和端口是公开的直接跑起来等于把数据库裸奔在默认凭据上。至少改这几处配置项默认值修改建议MySQL root 密码默认弱密码改成强密码MySQL 应用用户密码默认弱密码与 root 密码区分OpenMetadata Server 端口8585按需映射避免冲突Elasticsearch 内存默认较小按宿主机内存调大Airflow 相关密码默认值生产环境必须改用编辑器打开docker-compose.yml搜索password和MYSQL_ROOT_PASSWORD逐项替换。端口部分找到8585:8585这种映射左边是宿主机端口如果 8585 被占用就改成9585:8585。Elasticsearch 的ES_JAVA_OPTS建议设成-Xms2g -Xmx2g低于 1g 容易启动失败。# 片段示例MySQL 环境变量部分 environment: MYSQL_ROOT_PASSWORD: YourStrongRootPwd123 MYSQL_USER: openmetadata_user MYSQL_PASSWORD: YourStrongUserPwd456 MYSQL_DATABASE: openmetadata_db改完保存用docker-compose -f docker-compose.yml config校验语法这个命令会把最终解析的配置打印出来有 YAML 缩进错误会直接报行号。我一般改完必跑一遍比启动后看容器日志猜问题快得多。5. 启动与排错镜像拉不动、容器起不来怎么办5.1 启动命令与状态检查# 后台启动所有服务 docker-compose -f docker-compose.yml up --detach # 查看容器状态 docker ps # 查看所有容器包括已退出的 docker ps -a--detach让服务在后台跑不加这个参数会占住终端。docker ps只显示运行中的容器如果某个容器反复重启用docker ps -a能看到它的退出状态。重点关注 OpenMetadata Server、MySQL、Elasticsearch 三个核心容器它们的状态应该是Up且持续时间在增长。启动过程不是瞬间完成的MySQL 初始化、Elasticsearch 建索引、Server 连数据库都需要时间。第一次启动建议等 3 到 5 分钟再用docker-compose logs -f openmetadata_server跟踪日志看到Started OpenMetadataApplication之类的字样才算真正就绪。5.2 镜像拉取失败的应对手册里提到基础镜像可能拉不下来这是国内环境最常见的问题。docker-compose up卡在Pulling阶段或者报net/http: TLS handshake timeout都是镜像仓库访问不畅。常见做法有两种一是给 Docker 配置镜像加速器在/etc/docker/daemon.json里加registry-mirrors然后systemctl restart docker二是把 GitHub 上的镜像先拉到本地或私有仓库再改编排文件里的image字段指向自己的地址。第二种更彻底适合内网环境。# 配置镜像加速器示例 cat /etc/docker/daemon.json EOF { registry-mirrors: [https://your-mirror.example.com], exec-opts: [native.cgroupdriversystemd] } EOF # 重启 Docker 使配置生效 systemctl daemon-reload systemctl restart dockerexec-opts那行是解决 CentOS 7 上 cgroup driver 不一致的常见手段K8s 环境尤其要注意。改完 daemon.json 必须重启 Docker否则不生效。重启后之前跑的容器会停需要重新docker-compose up -d。5.3 登录与初始账号浏览器访问http://你的服务器IP:8585/能看到登录页就说明 Server 起来了。默认管理员邮箱是adminopen-metadata.org密码在数据库里存着首次登录后建议立即改掉。如果登录报错先确认 MySQL 容器是否健康Server 连不上数据库时登录接口会直接 500。提示如果页面能打开但一直转圈多半是 Elasticsearch 没就绪用curl http://localhost:9200/_cluster/health看状态是不是 green 或 yellow。6. 避坑清单五个让我返工过的具体问题6.1 容器内存不足被系统杀掉现象Elasticsearch 容器启动后几分钟自动退出docker ps -a显示Exited (137)。原因137 是 SIGKILL通常是 OOM Killer 干的。Elasticsearch 默认堆内存加上其他容器4GB 机器扛不住。解决调大宿主机内存到 8GB 以上或在编排文件里把ES_JAVA_OPTS降到-Xms1g -Xmx1g同时给容器加mem_limit。6.2 端口冲突导致 Server 起不来现象docker-compose up报Bind for 0.0.0.0:8585 failed: port is already allocated。原因宿主机上已有进程占用 8585可能是之前没清理干净的容器或其他服务。解决netstat -tlnp | grep 8585找到占用进程要么停掉它要么改编排文件里的宿主机端口映射。6.3 MySQL 初始化脚本执行失败现象MySQL 容器状态是 Up但 Server 连库报Table openmetadata_db.xxx doesnt exist。原因首次启动时 MySQL 数据卷里已有旧数据初始化脚本不会重复执行。解决停掉服务删除 MySQL 对应的数据卷目录docker-compose down -v或手动删挂载点重新 up 让初始化跑一遍。6.4 docker-compose 命令找不到现象docker-compose: command not found但 pip 显示已安装。原因pip 装的脚本在/usr/local/bin而该路径不在当前用户的 PATH 里或者 pip 绑定了 Python2。解决which docker-compose确认路径没有就export PATH$PATH:/usr/local/bin并检查pip -V绑定的 Python 版本。6.5 时区不一致导致日志时间错乱现象容器日志时间比本地时间差 8 小时排查问题时对不上。原因容器默认 UTC 时区宿主机是 CST。解决在编排文件里给各服务加TZ: Asia/Shanghai环境变量或挂载/etc/localtime:/etc/localtime:ro。7. 进阶把默认配置改成能长期跑的样子跑通只是第一步要让这套环境稳定用下去有几处值得动手调。第一是数据持久化默认编排文件用命名卷存 MySQL 和 Elasticsearch 数据docker-compose down不会删卷但down -v会。生产环境建议把卷映射到宿主机固定目录比如/data/openmetadata/mysql这样备份和迁移都直观。第二是资源限制。给每个容器加deploy.resources.limits或者mem_limit防止某个服务吃光内存拖垮整机。Elasticsearch 的堆内存设成宿主机内存的一半以内且不超过 31GB超过这个值 JVM 会失去指针压缩优化。第三是日志轮转。Docker 默认的 json-file 日志驱动不限制大小跑久了能把磁盘写满。在 daemon.json 里配log-opts{ log-driver: json-file, log-opts: { max-size: 100m, max-file: 3 } }这样每个容器最多留 3 个 100MB 的日志文件超出自动轮转。改完重启 Docker 生效。第四是验证服务健康。除了看docker ps更可靠的是用健康检查接口。OpenMetadata Server 有/healthcheck端点Elasticsearch 有_cluster/healthMySQL 用mysqladmin ping。写个简单的巡检脚本定时跑比人工盯强。#!/bin/bash # 简易健康巡检 curl -sf http://localhost:8585/healthcheck || echo OpenMetadata Server 异常 curl -sf http://localhost:9200/_cluster/health || echo Elasticsearch 异常 docker exec openmetadata_mysql mysqladmin ping -uroot -p$MYSQL_ROOT_PASSWORD 2/dev/null || echo MySQL 异常这套配置我前后调了三版才稳定第一版没限制日志磁盘一周就告警第二版没设内存上限Elasticsearch 和 Server 抢内存互相拖第三版把时区和日志轮转都补上才算能安心放着跑。从那以后我每次部署容器化服务都强制先过一遍资源限制、日志轮转、时区这三项再谈功能验证。希望帮到你。本文还有配套的精品资源点击获取