Apache Ranger 2.6.0 Docker Compose 部署指南

Apache Ranger 2.6.0 Docker Compose 部署指南:mariadb/solr/ranger-admin 三服务编排,含自建镜像、SeparateDBA、Solr core 预置,数据持久化与登录验证均实测。

Apache RangerApache Ranger2026/10/13

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
Docker29.8.0(实测;建议 24 及以上)
Docker Composev2(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.6Docker 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 落不到持久化卷。

三、前置条件

  1. 服务器已安装 Docker 与 Docker Compose v2 插件,Docker 服务运行中。
  2. 能访问 Docker Hub(拉取 ubuntu:22.04、mariadb:10.6 基础镜像)、dlcdn.apache.org(下载 Ranger 包)与 repo1.maven.org(下载 mysql-connector jar)。
  3. 端口 3306 / 6080 / 6083 未被占用(管理台 6080 为唯一对外入口,3306/6083 可按需去掉映射)。
  4. 准备充足磁盘: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 实测关键点):

  1. 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 完成。
  2. 4 个管理密码保持默认:若把 rangerAdmin_password 等设为非默认值,2.6.0 setup.sh 的自动改密环节会失败甚至使 setup.sh EXIT=1 反复重启(见 FAQ 11.1)。保持默认后 setup 顺利完成,管理员密码在部署完成后手动修改(见 4.10)。
  3. 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_serversolr_home 持久化(含预置 core)
./install.properties:/opt/ranger-admin/install.propertiessetup.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/mysqlMariaDB 数据文件,docker compose down 不删除,重启后库仍在
./data/solr/opt/solr/ranger_audit_serverSolr home(solr.xml、ranger_audits core 与索引)
./logs/opt/ranger-admin/logssetup.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_PASSWORDranger-mariadbMariaDB root 密码q1w2e3r4
MYSQL_DATABASEranger-mariadb自动创建的数据库ranger
MYSQL_USER / MYSQL_PASSWORDranger-mariadb自动创建的数据库用户/密码rangeradmin / q1w2e3r4
JAVA_HOMEranger-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 6083Solr 监听端口
-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 重建容器。

十二、参考链接