Apache Ranger 2.6.0 Docker Compose 部署指南
Apache Ranger 2.6.0 Docker Compose 部署指南:mariadb/solr/ranger-admin 三服务编排,含自建镜像、SeparateDBA、Solr core 预置,数据持久化与登录验证均实测。
Apache Ranger 2.6.0 Docker Compose 部署指南
目标:使用 Docker Compose 在单台服务器上编排 Apache Ranger 2.6.0 完整栈(MariaDB + Solr + Ranger Admin),通过自建镜像与预置 Solr core 实现「一条 docker compose 命令拉起 Ranger Admin」,管理台 6080 映射到宿主机,数据与日志落盘持久化。全程命令与回显均为实际执行结果。
一、环境信息
| 项目 | 值 |
|---|---|
| 宿主机操作系统 | Linux x86_64 |
| Docker | 29.8.0(实测;建议 24 及以上) |
| Docker Compose | v2(docker compose 子命令) |
| Ranger 版本 | 2.6.0(ranger-2.6.0-admin.tar.gz,396,024,997 字节 ≈ 377MB) |
| 镜像 | mariadb:10.6(官方)、ranger-admin:2.6.0(自建)、ranger-solr:8.11.4(自建) |
| 服务名 | ranger-mariadb、ranger-solr、ranger-admin |
| 自定义网络 | ranger-net(172.28.0.0/24,固定 IP:mariadb=172.28.0.10、admin=172.28.0.11、solr=172.28.0.12) |
| 映射端口 | 3306(mariadb)、6083(solr)、6080(ranger-admin) |
| 部署目录 | /opt/ranger-compose |
| 执行账号 | root |
二、镜像选型说明
| 镜像 | 来源 | 说明 |
|---|---|---|
mariadb:10.6 | Docker Hub 官方 | Ranger 元数据库,配合 --skip-name-resolve 与固定 IP 授权 |
ranger-admin:2.6.0 | 自建(基于 ubuntu:22.04) | 内置 OpenJDK 8 + Ranger 2.6.0 admin 包 + mysql-connector jar,启动即 setup 初始化 |
ranger-solr:8.11.4 | 自建(基于 ubuntu:22.04) | 内置 OpenJDK 8 + Solr 8.11.4,solr_home 指向挂载卷 |
💡 选型要点:Ranger 官方未发布 Docker 镜像,admin 与 solr 需自建。admin 镜像必须内置 OpenJDK 8(Ranger 官方要求 Java 1.8)与 mysql-connector jar(install.properties 的 SQL_CONNECTOR_JAR 指向);solr 镜像须以
-s指定 solr_home 为挂载目录,否则预置的 ranger_audits core 落不到持久化卷。
三、前置条件
- 服务器已安装 Docker 与 Docker Compose v2 插件,Docker 服务运行中。
- 能访问 Docker Hub(拉取
ubuntu:22.04、mariadb:10.6基础镜像)、dlcdn.apache.org(下载 Ranger 包)与 repo1.maven.org(下载 mysql-connector jar)。 - 端口 3306 / 6080 / 6083 未被占用(管理台 6080 为唯一对外入口,3306/6083 可按需去掉映射)。
- 准备充足磁盘:admin 包 377MB,Solr 数据与 MariaDB 数据落盘于 /opt/ranger-compose/data。
四、部署步骤
4.1 创建目录结构
mkdir -p /opt/ranger-compose/{db-init,data/mariadb,data/solr,logs}
cd /opt/ranger-compose
4.2 编写 ranger-admin 自建镜像 Dockerfile
cat > Dockerfile <<'EOF'
FROM ubuntu:22.04
RUN apt-get update -qq && DEBIAN_FRONTEND=noninteractive apt-get install -y \
openjdk-8-jdk-headless wget python3 procps net-tools mariadb-client
# MySQL 驱动(install.properties 的 SQL_CONNECTOR_JAR 指向此路径)
RUN wget -q -O /usr/share/java/mysql-connector-java.jar \
https://repo1.maven.org/maven2/com/mysql/mysql-connector-j/8.0.33/mysql-connector-j-8.0.33.jar
# Ranger 2.6.0 admin 包(2.6.0 起位于 services/admin 子目录)
RUN cd /opt \
&& wget -q -O ranger-2.6.0-admin.tar.gz \
https://dlcdn.apache.org/ranger/2.6.0/services/admin/ranger-2.6.0-admin.tar.gz \
&& tar -xzf ranger-2.6.0-admin.tar.gz \
&& mv ranger-2.6.0-admin /opt/ranger-admin \
&& rm -f ranger-2.6.0-admin.tar.gz
# JVM 堆收敛到 256-512MB(默认 -Xms1g;-Xmx 上限由 install.properties 的 ranger_admin_max_heap_size=512m 控制)
RUN sed -i "s/-Xms1g/-Xms256m/" /opt/ranger-admin/ews/ranger-admin-services.sh
ENV JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
WORKDIR /opt/ranger-admin
EOF
说明:镜像内
install.properties由宿主机挂载覆盖(见 4.6 / 八章),因此 setup.sh 读取的数据库地址、审计地址等均在宿主机侧维护,改配置无需重建镜像。
4.3 编写 solr 自建镜像 solr.Dockerfile
cat > solr.Dockerfile <<'EOF'
FROM ubuntu:22.04
RUN apt-get update -qq && DEBIAN_FRONTEND=noninteractive apt-get install -y \
openjdk-8-jdk-headless wget procps
RUN cd /opt \
&& wget -q -O solr-8.11.4.tgz \
https://dlcdn.apache.org/solr/solr/8.11.4/solr-8.11.4.tgz \
&& tar -xzf solr-8.11.4.tgz \
&& mv solr-8.11.4 /opt/solr \
&& rm -f solr-8.11.4.tgz
ENV JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
# -s 指定 solr_home 为挂载卷;-f 前台运行;-force 允许 root
CMD ["/opt/solr/bin/solr", "start", "-p", "6083", "-force", "-f", "-s", "/opt/solr/ranger_audit_server"]
EOF
4.4 预置 Solr core 目录(data/solr)
Ranger 2.6.0 的 setup.sh 不自动创建 core,需预先在挂载卷内放好 solr.xml 与 ranger_audits core。solr.xml 与 conf 取自 Ranger 安装包 contrib/solr_for_audit_setup/(先解压 admin 包获取):
cd /tmp
wget -q -O ranger-2.6.0-admin.tar.gz \
https://dlcdn.apache.org/ranger/2.6.0/services/admin/ranger-2.6.0-admin.tar.gz
tar -xzf ranger-2.6.0-admin.tar.gz
mkdir -p /opt/ranger-compose/data/solr/ranger_audits/conf
cp /tmp/ranger-2.6.0-admin/contrib/solr_for_audit_setup/solr_standalone/solr.xml \
/opt/ranger-compose/data/solr/solr.xml
cp -r /tmp/ranger-2.6.0-admin/contrib/solr_for_audit_setup/conf/* \
/opt/ranger-compose/data/solr/ranger_audits/conf/
创建 core.properties:
cat > /opt/ranger-compose/data/solr/ranger_audits/core.properties <<'EOF'
name=ranger_audits
config=solrconfig.xml
schema=managed-schema
dataDir=/opt/solr/ranger_audit_server/ranger_audits/data
EOF
💡 solr.xml 必须存在,否则 solr 启动报
Solr home directory ... must contain a solr.xml file(见 FAQ 11.4)。core 目录结构与 conf 由 ranger 包提供,确保 schema/config 与 Ranger 审计写入兼容。
4.5 编写数据库初始化脚本 db-init/init.sql
Ranger 使用 setup_mode=SeparateDBA(见 4.6),库与授权由 mariadb 镜像环境变量 + 本脚本完成:
cat > db-init/init.sql <<'EOF'
CREATE USER IF NOT EXISTS 'rangeradmin'@'localhost' IDENTIFIED BY 'q1w2e3r4';
CREATE USER IF NOT EXISTS 'rangeradmin'@'172.28.0.10' IDENTIFIED BY 'q1w2e3r4';
GRANT ALL PRIVILEGES ON ranger.* TO 'rangeradmin'@'localhost' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON ranger.* TO 'rangeradmin'@'172.28.0.10' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EOF
4.6 编写 install.properties
cat > install.properties <<'EOF'
setup_mode=SeparateDBA
PYTHON_COMMAND_INVOKER=python3
DB_FLAVOR=MYSQL
SQL_CONNECTOR_JAR=/usr/share/java/mysql-connector-java.jar
db_root_user=root
db_root_password=q1w2e3r4
db_host=172.28.0.10
db_name=ranger
db_user=rangeradmin
db_password=q1w2e3r4
rangerAdmin_password=admin
rangerTagsync_password=rangertagsync
rangerUsersync_password=rangerusersync
keyadmin_password=keyadmin
audit_store=solr
audit_solr_urls=http://ranger-solr:6083/solr/ranger_audits
audit_solr_collection_name=ranger_audits
audit_solr_config_name=ranger_audits
audit_solr_bootstrap_enabled=true
policymgr_external_url=http://localhost:8080
policymgr_http_enabled=true
unix_user=ranger
authentication_method=NONE
remoteLoginEnabled=true
LOGFILE=$PWD/logfile
LOGFILES="$LOGFILE"
ranger_admin_max_heap_size=512m
EOF
⚠️ 注意(Ranger 2.6.0 实测关键点):
setup_mode=SeparateDBA必须:默认模式下 DBA 步骤用 JISQL 执行show databases like 'ranger',JISQL 会剥离 SQL 单引号导致SQLSyntaxErrorException/Database creation failed(见 FAQ 11.2)。SeparateDBA 跳过 DBA 步骤,schema 导入由后续 db_setup.py 用 rangeradmin 完成。- 4 个管理密码保持默认:若把
rangerAdmin_password等设为非默认值,2.6.0 setup.sh 的自动改密环节会失败甚至使 setup.sh EXIT=1 反复重启(见 FAQ 11.1)。保持默认后 setup 顺利完成,管理员密码在部署完成后手动修改(见 4.10)。db_host用 mariadb 容器固定 IP 172.28.0.10,配合 mariadb 的--skip-name-resolve与 IP 授权(见 4.7)。
4.7 编写 docker-compose.yml
cat > docker-compose.yml <<'EOF'
version: '3.8'
services:
ranger-mariadb:
image: mariadb:10.6
container_name: ranger-mariadb
command: --skip-name-resolve
environment:
MYSQL_ROOT_PASSWORD: q1w2e3r4
MYSQL_DATABASE: ranger
MYSQL_USER: rangeradmin
MYSQL_PASSWORD: q1w2e3r4
volumes:
- ./db-init/init.sql:/docker-entrypoint-initdb.d/init.sql:ro
- ./data/mariadb:/var/lib/mysql
ports:
- "3306:3306"
networks:
ranger-net:
ipv4_address: 172.28.0.10
ranger-solr:
build:
context: .
dockerfile: solr.Dockerfile
image: ranger-solr:8.11.4
container_name: ranger-solr
volumes:
- ./data/solr:/opt/solr/ranger_audit_server
ports:
- "6083:6083"
networks:
ranger-net:
ipv4_address: 172.28.0.12
ranger-admin:
build:
context: .
dockerfile: Dockerfile
image: ranger-admin:2.6.0
container_name: ranger-admin
depends_on:
- ranger-mariadb
- ranger-solr
command: bash -lc "cd /opt/ranger-admin && bash setup.sh > /opt/ranger-admin/logs/setup.log 2>&1 && bash /opt/ranger-admin/ews/ranger-admin-services.sh start && sleep 5 && tail -f /dev/null"
volumes:
- ./install.properties:/opt/ranger-admin/install.properties
- ./logs:/opt/ranger-admin/logs
ports:
- "6080:6080"
networks:
ranger-net:
ipv4_address: 172.28.0.11
networks:
ranger-net:
driver: bridge
ipam:
config:
- subnet: 172.28.0.0/24
EOF
| 配置项 | 说明 |
|---|---|
command: --skip-name-resolve(mariadb) | 容器内主机名无法反向解析,GRANT 用 IP 形式(见 FAQ 11.3) |
MYSQL_DATABASE/MYSQL_USER/MYSQL_PASSWORD | 首次启动自动建库 ranger 并创建 rangeradmin 用户 |
./db-init/init.sql:/docker-entrypoint-initdb.d/init.sql | 首次初始化执行补充授权 |
./data/solr:/opt/solr/ranger_audit_server | solr_home 持久化(含预置 core) |
./install.properties:/opt/ranger-admin/install.properties | setup.sh 读取的配置挂载,宿主机直接改 |
command(admin) | 容器启动后先 setup 初始化,再启动 Admin 服务,最后 tail 保活(见七章) |
172.28.0.0/24 + ipv4_address | 固定三服务 IP,数据库/审计地址按 IP 写死,重启不变 |
4.8 启动服务
docker compose up -d --build
首次构建需拉取基础镜像并下载 Ranger/Solr 包,耗时较长;完成后核对状态:
docker compose ps
回显(节选,三个服务均 Up):
NAME STATUS PORTS
ranger-admin Up 0.0.0.0:6080->6080/tcp
ranger-mariadb Up 0.0.0.0:3306->3306/tcp
ranger-solr Up 0.0.0.0:6083->6083/tcp
4.9 验证初始化结果
查看 setup 日志关键回显:
docker compose exec ranger-admin tail -n 30 /opt/ranger-admin/logs/setup.log
回显(节选):
Setup mode is set to SeparateDBA. Not Running DBA steps...
ranger_core_db_mysql.sql file imported successfully
Installation of Ranger PolicyManager Web Application is completed.
确认 6080 管理台可访问:
curl -s -o /dev/null -w "%{http_code}\n" http://localhost:6080/login.jsp
回显:
200
确认 Solr core 已加载:
curl -s "http://localhost:6083/solr/admin/cores?action=STATUS"
回显(节选,numFound=0 属正常,审计为 agent 上报数据):
"ranger_audits":{
"name":"ranger_audits",
"instanceDir":"/opt/solr/ranger_audit_server/ranger_audits",
"config":"solrconfig.xml",
"schema":"managed-schema",
"index":{"numDocs":0,...}}
4.10 修改管理员密码
Ranger 密码策略要求至少 8 位且含大写、小写、数字;部署完成后把 admin 密码从默认的 admin 改为演示密码 Q1w2e3r4:
docker compose exec ranger-admin bash -lc "cd /opt/ranger-admin && python3 changepasswordutil.py admin admin Q1w2e3r4"
回显:
[I] Password updated successfully
用新密码登录验证:
curl -s -c /tmp/ranger_cookies.txt -X POST http://localhost:6080/login -d "username=admin&password=Q1w2e3r4"
回显:
{"statusCode":200,"msgDesc":"Login Successful"}
五、数据持久化说明
| 挂载 | 容器内路径 | 内容 |
|---|---|---|
./data/mariadb | /var/lib/mysql | MariaDB 数据文件,docker compose down 不删除,重启后库仍在 |
./data/solr | /opt/solr/ranger_audit_server | Solr home(solr.xml、ranger_audits core 与索引) |
./logs | /opt/ranger-admin/logs | setup.log 与 Admin 运行日志 |
./install.properties | /opt/ranger-admin/install.properties | 初始化配置,改后重启生效 |
./db-init/init.sql | /docker-entrypoint-initdb.d/init.sql | 数据库初始化脚本(仅首次建库生效) |
⚠️ 注意:
data/mariadb已存在数据后,MYSQL_* 环境变量与 init.sql 不再生效。若需重建库,先docker compose down后删除data/mariadb目录再up。
六、常用环境变量表
| 环境变量 | 作用对象 | 说明 | 本指南值 |
|---|---|---|---|
MYSQL_ROOT_PASSWORD | ranger-mariadb | MariaDB root 密码 | q1w2e3r4 |
MYSQL_DATABASE | ranger-mariadb | 自动创建的数据库 | ranger |
MYSQL_USER / MYSQL_PASSWORD | ranger-mariadb | 自动创建的数据库用户/密码 | rangeradmin / q1w2e3r4 |
JAVA_HOME | ranger-admin、ranger-solr | 镜像内已 ENV 声明 | /usr/lib/jvm/java-8-openjdk-amd64 |
其余 Ranger 参数不在环境变量中注入,统一走挂载的
install.properties(见八章)。
七、常用配置参数说明(command)
ranger-admin 的 command 覆盖镜像默认启动方式,对应容器启动后的一连串初始化动作:
| command 阶段 | 说明 |
|---|---|
bash setup.sh > /opt/ranger-admin/logs/setup.log 2>&1 | 初始化(导入 schema、部署 webapp),日志落盘便于排障 |
bash /opt/ranger-admin/ews/ranger-admin-services.sh start | 启动 Admin 服务(6080) |
sleep 5 && tail -f /dev/null | 前台保活,避免容器退出 |
ranger-solr 的 CMD 为 solr start -p 6083 -force -f -s /opt/solr/ranger_audit_server:
| 参数 | 说明 |
|---|---|
-p 6083 | Solr 监听端口 |
-f | 前台运行(容器 PID 1) |
-force | 允许以 root 运行 |
-s /opt/solr/ranger_audit_server | 指定 solr_home 为挂载卷(core 落盘到 data/solr) |
若初始化失败,可先
docker compose exec ranger-admin bash手动排查;修复配置后docker compose restart ranger-admin会重新执行 setup(schema 已导入,重复执行幂等)。
八、配置文件持久化(conf 挂载)
Ranger 的全部初始化配置集中在宿主机侧的 install.properties,通过挂载覆盖镜像内同名文件:
volumes:
- ./install.properties:/opt/ranger-admin/install.properties
- ./logs:/opt/ranger-admin/logs
修改流程:编辑宿主 install.properties → docker compose restart ranger-admin(容器启动即重跑 setup,读取最新配置)。data/solr 内的 solr.xml 与 ranger_audits/conf 同理,改后 docker compose restart ranger-solr 生效。
九、等价 docker run 运行方式
不写 docker-compose.yml 时,也可用三条 docker run 手动编排(需先建网络):
docker network create --driver bridge --subnet 172.28.0.0/24 ranger-net
docker run -d --name ranger-mariadb --network ranger-net --ip 172.28.0.10 \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=q1w2e3r4 \
-e MYSQL_DATABASE=ranger \
-e MYSQL_USER=rangeradmin \
-e MYSQL_PASSWORD=q1w2e3r4 \
-v "$PWD/db-init/init.sql:/docker-entrypoint-initdb.d/init.sql:ro" \
-v "$PWD/data/mariadb:/var/lib/mysql" \
mariadb:10.6 --skip-name-resolve
docker run -d --name ranger-solr --network ranger-net --ip 172.28.0.12 \
-p 6083:6083 \
-v "$PWD/data/solr:/opt/solr/ranger_audit_server" \
ranger-solr:8.11.4
docker run -d --name ranger-admin --network ranger-net --ip 172.28.0.11 \
-p 6080:6080 \
-v "$PWD/install.properties:/opt/ranger-admin/install.properties" \
-v "$PWD/logs:/opt/ranger-admin/logs" \
ranger-admin:2.6.0 \
bash -lc "cd /opt/ranger-admin && bash setup.sh > /opt/ranger-admin/logs/setup.log 2>&1 && bash /opt/ranger-admin/ews/ranger-admin-services.sh start && sleep 5 && tail -f /dev/null"
十、常用运维命令
docker compose up -d --build # 构建自建镜像并启动全部服务
docker compose ps # 查看三服务状态
docker compose logs -f ranger-admin # 跟踪 admin 容器日志(setup.log 亦在 ./logs)
docker compose exec ranger-admin bash # 进入 admin 容器排查
docker compose restart ranger-solr # 重启单个服务(如 solr 配置变更)
docker compose restart ranger-admin # 重跑 setup 初始化(幂等)
docker compose down # 停止并删除容器(数据卷保留)
十一、常见问题(FAQ)
11.1 ranger-admin 容器反复重启,setup.log 报 Old Password and New Password argument are same
原因:install.properties 中只把 rangerAdmin_password 设为非默认值(其他 3 个保持默认)时,Ranger 2.6.0 的 python_command_for_change_password 固定取 12 个位置参数,单组密码调用会补出 3 组空 -pair,db_setup.py 对空组判断 oldPassword==newPassword 后 sys.exit(1),setup.sh EXIT=1 退出,容器不断重启。
解决:4 个管理密码(rangerAdmin_password / rangerTagsync_password / rangerUsersync_password / keyadmin_password)全部保持默认,setup 完成后按 4.10 手动 changepasswordutil.py admin admin Q1w2e3r4 改密。
11.2 setup.log 报 Database creation failed / SQLSyntaxErrorException
原因:未设置 setup_mode=SeparateDBA。默认模式下 dba_script.py 的 verify_db 用 JISQL 执行 show databases like 'ranger',JISQL 剥离 SQL 单引号导致语法错误。
解决:install.properties 中设置 setup_mode=SeparateDBA(库、用户、授权由 mariadb 镜像环境变量 + init.sql 预先完成),docker compose restart ranger-admin。
11.3 mariadb 授权报 ERROR 1133 (42000): Can't find any matching row in the user table
原因:--skip-name-resolve 下 mariadb 不做主机名解析,按主机名 GRANT 匹配不到。
解决:GRANT 使用 IP 形式(init.sql 中 'rangeradmin'@'172.28.0.10'),并把 db_host 固定为容器 IP 172.28.0.10;若实际连接源 IP 不同,把授权 IP 换成对应客户端容器 IP。
11.4 ranger-solr 启动失败,日志报 Solr home directory ... must contain a solr.xml file
原因:挂载卷 data/solr 为空,solr_home 下缺 solr.xml。
解决:按 4.4 从 Ranger 包复制 contrib/solr_for_audit_setup/solr_standalone/solr.xml 到 data/solr/solr.xml,再 docker compose restart ranger-solr。
11.5 solr 起来了但 ranger_audits core 不存在(查询 404)
原因:Ranger 2.6.0 主 setup.sh 不执行 solr bootstrap;且 solr 若未用 -s 指定 solr_home,core 落在默认 home 而非挂载卷。
解决:按 4.4 预置 ranger_audits/{core.properties,conf} 目录,确保 CMD 带 -s /opt/solr/ranger_audit_server,重启后 curl -s "http://localhost:6083/solr/admin/cores?action=STATUS" 核对。
11.6 手动改密报 Ranger Password change utility is being executed by some other host
原因:数据库 x_db_version_h 表残留 DEFAULT_ALL_ADMIN_UPDATE 标记(active='Y'),ChangePasswordUtil 认为改密流程被其他主机占用。
解决:清理标记后重试(官方错误信息亦建议手动删除该标记):
docker compose exec ranger-mariadb mysql -uroot -pq1w2e3r4 -e "DELETE FROM ranger.x_db_version_h WHERE version='DEFAULT_ALL_ADMIN_UPDATE'; FLUSH PRIVILEGES;"
11.7 修改宿主机 install.properties 后不生效
原因:容器内 install.properties 是挂载文件,但 ranger-admin 启动命令只在容器创建时执行一次 setup;restart 后容器内文件为最新挂载内容,需确认 restart 而非仅 docker restart 缓存旧容器。
解决:改完宿主文件后执行 docker compose restart ranger-admin;若仍不生效,docker compose down && docker compose up -d 重建容器。
十二、参考链接
- Apache Ranger 下载页:https://dlcdn.apache.org/ranger/
- Apache Solr 下载:https://solr.apache.org/downloads.html
- MariaDB 官方镜像:https://hub.docker.com/_/mariadb
- Docker Compose 文档:https://docs.docker.com/compose/
- Apache Ranger 官方文档:https://ranger.apache.org/