Apache Gobblin 0.17.0 Docker Compose 部署指南

使用 Docker Compose 一条命令部署 Apache Gobblin 0.17.0 standalone 单容器(Eclipse Temurin 8 基础镜像 + 源码构建的约 180MB 发行包),涵盖 Dockerfile、docker-compose.yml、entrypoint 启动脚本、JVM 堆限定 512MB、9000 端口映射与健康检查,并给出等价 docker run 方式与本地文件复制作业验证。部署在 Ubuntu 22.04 + Docker Compose 环境实测通过。

Apache GobblinApache Gobblin容器化部署Apache大数据Docker Compose2026/10/11

Apache Gobblin 0.17.0 Docker Compose 部署指南

目标:使用 Docker Compose 一键部署 Apache Gobblin 0.17.0 standalone 单容器(Eclipse Temurin 8 基础镜像 + 源码构建出的约 180 MB 发行包),涵盖自定义镜像、docker-compose.yml、挂载 entrypoint 启动脚本、JVM 堆内存限定、Admin Web UI 9000 端口映射与健康检查,并给出等价的 docker run 运行方式与「本地文件 → 本地文件」复制作业验证。部署流程在 Ubuntu 22.04 + Docker(Compose v2)环境实测通过。

一、环境信息

  • 操作系统:Ubuntu 22.04.5 LTS(x86_64)
  • Docker 版本:Docker Engine(含 Compose v2 插件)
  • 基础镜像:eclipse-temurin:8-jdk(JDK 8,Gobblin 0.17.0 编译/运行目标为 Java 8)
  • 组件版本:Apache Gobblin 0.17.0
  • 容器名称:gobblin-compose-standalone
  • 镜像名:gobblin-standalone:0.17.0
  • 端口映射:9000(Admin Web UI / Jetty)
  • 部署目录:/opt/data/ops/gobblin-compose
  • 发行包来源:由本机源码构建产出的 apache-gobblin-incubating-bin-0.17.0.tar.gz(约 180 MB,解压目录 gobblin-dist)
  • JVM 堆:-Xmx512m -Xms256m(限定在 256–512MB 区间)

二、镜像选型说明

镜像构建方式版本说明
自构建镜像(本文)eclipse-temurin:8-jdk 基础 + DockerfileGobblin 0.17.0构建时把源码构建出的发行包拷入镜像解压部署,与《Ubuntu 22.04 安装 Apache Gobblin 0.17.0 指南》产出一致
通用 JDK8 镜像预构建需查可用标签Gobblin 0.17.0 必须 JDK 8,镜像需自带发行包方可运行
官方预构建镜像官方 registry无Gobblin 官方无二进制发行包,也无官方镜像,只能自构建

💡 说明:采用 eclipse-temurin:8-jdk + 本机源码构建的发行包,可精确锁版本 0.17.0,规避预构建镜像标签漂移与官方无二进制的问题。

三、前置条件

  • 已安装 Docker Engine 与 Docker Compose 插件:docker --version && docker compose version
  • 宿主机已规划部署目录 /opt/data/ops/gobblin-compose
  • 已按《Ubuntu 22.04 安装 Apache Gobblin 0.17.0 指南》构建出 apache-gobblin-incubating-bin-0.17.0.tar.gz

四、部署步骤

4.1 创建部署目录与文件

mkdir -p /opt/data/ops/gobblin-compose/jobs
cd /opt/data/ops/gobblin-compose

目录内含 Dockerfile、docker-compose.yml、entrypoint.sh、jobs/local-copy.job 与发行包 apache-gobblin-incubating-bin-0.17.0.tar.gz。

4.2 编写 Dockerfile

保存为 /opt/data/ops/gobblin-compose/Dockerfile:

FROM eclipse-temurin:8-jdk
ENV JAVA_HOME=/opt/java/openjdk
ENV GOBBLIN_HOME=/opt/gobblin/gobblin-dist
ENV GOBBLIN_WORK_DIR=/opt/gobblin/work
ENV GOBBLIN_JOB_CONFIG_DIR=/opt/gobblin/jobs
ENV PATH=$GOBBLIN_HOME/bin:$JAVA_HOME/bin:$PATH

COPY apache-gobblin-incubating-bin-0.17.0.tar.gz /opt/gobblin/
RUN set -eux; \
    cd /opt/gobblin; \
    tar -xzf apache-gobblin-incubating-bin-0.17.0.tar.gz; \
    rm -f apache-gobblin-incubating-bin-0.17.0.tar.gz; \
    ls -ld /opt/gobblin/gobblin-dist

# 开启 standalone Admin Web UI(Jetty,9000 端口);job history store 保持默认关闭,无需外部数据库
RUN sed -i 's/^job.execinfo.server.enabled=.*/job.execinfo.server.enabled=true/' \
        /opt/gobblin/gobblin-dist/conf/standalone/application.conf

# 作业配置目录与本地文件源/目标数据
COPY jobs/local-copy.job /opt/gobblin/jobs/local-copy.job
RUN mkdir -p /opt/gobblin/data/input /opt/gobblin/data/output "$GOBBLIN_WORK_DIR"; \
    printf 'hello gobblin\n'   > /opt/gobblin/data/input/a.txt; \
    printf 'copy demo\n'       > /opt/gobblin/data/input/b.txt; \
    printf 'compose deploy\n'  > /opt/gobblin/data/input/c.txt

COPY entrypoint.sh /opt/gobblin/entrypoint.sh
RUN chmod +x /opt/gobblin/entrypoint.sh

EXPOSE 9000
ENTRYPOINT ["/opt/gobblin/entrypoint.sh"]

💡 说明:构建阶段把源码构建出的发行包拷入镜像并解压到 /opt/gobblin/gobblin-dist;sed 将 job.execinfo.server.enabled 置为 true 以启动 Admin Web UI,同时保持 job.history.store.enabled(默认 false)关闭以免报 jdbcUrl 错误。

4.3 编写 docker-compose.yml

保存为 /opt/data/ops/gobblin-compose/docker-compose.yml:

services:
  gobblin:
    build: .
    image: gobblin-standalone:0.17.0
    container_name: gobblin-compose-standalone
    hostname: gobblin
    ports:
      - "9000:9000"   # Admin Web UI (Jetty)
    healthcheck:
      test: ["CMD-SHELL", "bash -c 'exec 3<>/dev/tcp/127.0.0.1/9000'"]
      interval: 10s
      timeout: 5s
      retries: 12
      start_period: 40s

⚠️ 注意:健康检查以 TCP 探测 9000 端口(Admin Web UI)判断就绪;start_period 留出 40s 供 Gobblin standalone 启动。

4.4 编写 entrypoint.sh

保存为 /opt/data/ops/gobblin-compose/entrypoint.sh,并赋执行权限:

chmod +x /opt/data/ops/gobblin-compose/entrypoint.sh

内容如下:

#!/usr/bin/env bash
set -x
export JAVA_HOME=/opt/java/openjdk
export GOBBLIN_HOME=/opt/gobblin/gobblin-dist
export GOBBLIN_WORK_DIR=/opt/gobblin/work
export GOBBLIN_JOB_CONFIG_DIR=/opt/gobblin/jobs
export PATH=$GOBBLIN_HOME/bin:$JAVA_HOME/bin:$PATH
mkdir -p "$GOBBLIN_WORK_DIR"
# standalone start 为后台守护启动,JVM 堆限制 512MB(符合 256–512MB 约束)
"$GOBBLIN_HOME/bin/gobblin-standalone.sh" start --jvmopts "-Xmx512m -Xms256m"
# 等待 Admin Web UI 起来
for i in $(seq 1 30); do
  if (exec 3<>/dev/tcp/127.0.0.1/9000) 2>/dev/null; then
    echo "=== Gobblin Admin Web UI is listening on 9000 ==="; break
  fi
  sleep 2
done
echo "=== Gobblin standalone started, keep container alive ==="
tail -f /dev/null

💡 说明:使用挂载的 entrypoint 脚本启动 standalone 并保持容器存活;--jvmopts "-Xmx512m -Xms256m" 将 JVM 堆限定在 256–512MB 区间。

4.5 作业配置 local-copy.job

保存为 /opt/data/ops/gobblin-compose/jobs/local-copy.job(本地文件 → 本地文件复制作业):

job.name=LocalFileCopyCompose
job.group=demo

# CopySource:本地文件系统到本地文件系统的复制作业
source.class=org.apache.gobblin.data.management.copy.CopySource
data.publisher.type=org.apache.gobblin.data.management.copy.publisher.CopyDataPublisher
writer.builder.class=org.apache.gobblin.data.management.copy.writer.FileAwareInputStreamDataWriterBuilder
converter.classes=org.apache.gobblin.converter.IdentityConverter

# 数据集发现:匹配输入目录下的所有 .txt
gobblin.dataset.profile.class=org.apache.gobblin.data.management.copy.CopyableGlobDatasetFinder
gobblin.dataset.pattern=/opt/gobblin/data/input/*.txt

# 目标目录与持久化目录
data.publisher.final.dir=/opt/gobblin/data/output
distcp.persist.dir=/opt/gobblin/data/persist

# 简化本地作业:不启用状态存储、跳过回收站、不在任务后清理 staging 数据
state.store.enabled=false
gobblin.trash.skip.trash=true
cleanup.staging.data.per.task=false
job.commit.parallelize=true

⚠️ 注意:作业文件后缀必须为 .job(或 .pull),.properties 不被加载。

4.6 构建并启动

cd /opt/data/ops/gobblin-compose
docker compose up -d --build

实测回显:

#14 naming to docker.io/library/gobblin-standalone:0.17.0 done
 Image gobblin-standalone:0.17.0 Built
 Network gobblin-compose_default Created
 Container gobblin-compose-standalone Created
 Container gobblin-compose-standalone Started

查看容器状态:

docker compose ps

实测回显:

NAME                         IMAGE                       SERVICE   STATUS                   PORTS
gobblin-compose-standalone   gobblin-standalone:0.17.0   gobblin   Up 2 minutes (healthy)   0.0.0.0:9000->9000/tcp, [::]:9000->9000/tcp

4.7 作业与 Web UI 验证

docker exec gobblin-compose-standalone bash -c \
  "grep -E 'Loaded [0-9]+ job configurations' /opt/gobblin/gobblin-dist/logs/standalone.out | tail -1"

实测回显:

2026-10-11 14:05:45 UTC INFO  [JobScheduler STARTING] JobScheduler  539 - Loaded 1 job configurations

作业执行成功:

docker exec gobblin-compose-standalone bash -c \
  "grep -E 'state SUCCESSFUL' /opt/gobblin/gobblin-dist/logs/standalone.out | tail -1"

实测回显:

2026-10-11 14:05:48 UTC INFO  [Commit-thread-0] SafeDatasetCommit  123 - Committing dataset ... job_LocalFileCopyCompose_1791727545874 with commit policy COMMIT_ON_FULL_SUCCESS and state SUCCESSFUL

输出校验与 Web UI 标题:

docker exec gobblin-compose-standalone bash -c \
  "diff -r /opt/gobblin/data/input /opt/gobblin/data/output && echo IDENTICAL"
docker exec gobblin-compose-standalone bash -c \
  "wget -qO- http://127.0.0.1:9000/ 2>/dev/null | grep -o '<title>.*</title>' | head -1"

实测回显:

IDENTICAL
<title>Gobblin Admin</title>

宿主机映射端口访问:

wget -qO- http://127.0.0.1:9000/ | grep -o '<title>.*</title>'

实测回显:

<title>Gobblin Admin</title>

4.8 验证 JVM 堆生效

docker exec gobblin-compose-standalone bash -c "jps -v | grep SchedulerDaemon"

实测回显(-Xmx512m 位于尾部,为最终生效值,MaxHeapSize = 512.0MB):

<pid> SchedulerDaemon -Xmx1g -Xms512m -Xmx512m -Dlog4j.configuration=file:///opt/gobblin/gobblin-dist/conf/standalone/log4j.xml -Dgobblin.logs.dir=/opt/gobblin/gobblin-dist/logs

五、数据持久化说明

Gobblin 的状态存储、任务 staging、发布输出与日志默认存于容器内目录(/opt/gobblin/work、/opt/gobblin/data、/opt/gobblin/gobblin-dist/logs)。若要持久化,可把宿主机的目录挂载回容器,例如在 docker-compose.yml 的 services.gobblin 下追加:

    volumes:
      - ./data:/opt/gobblin/data
      - ./work:/opt/gobblin/work
      - ./logs:/opt/gobblin/gobblin-dist/logs

💡 说明:将 /opt/gobblin/data(源/目标数据)、/opt/gobblin/work(状态存储与 staging)挂载为宿主机目录,容器重建后数据得以保留。

六、常用环境变量表

本例通过 entrypoint 脚本内的 export 注入环境,Compose 层也可用 environment: 注入:

环境变量实测值说明
JAVA_HOME/opt/java/openjdkJDK 8 家目录(Temurin 镜像内置)
GOBBLIN_HOME/opt/gobblin/gobblin-distGobblin 安装根目录
GOBBLIN_WORK_DIR/opt/gobblin/work状态存储 / staging 工作目录
GOBBLIN_JOB_CONFIG_DIR/opt/gobblin/jobs作业配置监测目录
PATH$GOBBLIN_HOME/bin:$JAVA_HOME/bin:$PATH命令搜索路径
JVM 堆-Xmx512m -Xms256m通过 --jvmopts 透传

七、常用配置参数说明

配置说明
job.execinfo.server.enabled=true启动 Admin Web UI(9000)
admin.server.enabled=true / admin.server.port=9000Admin Web Server 开关与端口
job.history.store.enabled=false作业历史库保持关闭(开启需 JDBC)
jobconf.dir=${env:GOBBLIN_JOB_CONFIG_DIR}作业配置监测目录
jobconf.monitor.interval=30000作业目录扫描间隔(ms)
--jvmopts "-Xmx512m -Xms256m"指定 JVM 堆参数

更多参数见《Apache Gobblin 0.17.0 配置参数详解》。

八、等价 docker run 运行方式

不加 Compose,可用单条 docker run 启动同一 standalone:

docker run -d --name gobblin-compose-standalone --hostname gobblin \
  -p 9000:9000 \
  -e JAVA_HOME=/opt/java/openjdk \
  -e GOBBLIN_HOME=/opt/gobblin/gobblin-dist \
  -e GOBBLIN_WORK_DIR=/opt/gobblin/work \
  -e GOBBLIN_JOB_CONFIG_DIR=/opt/gobblin/jobs \
  gobblin-standalone:0.17.0

💡 说明:镜像名即为 Compose 构建产物 gobblin-standalone:0.17.0;容器启动后由 entrypoint 拉起 standalone 并监听 9000。

九、常用运维命令

# 停止并移除容器
cd /opt/data/ops/gobblin-compose
docker compose down

# 重建并后台启动
docker compose up -d --build

# 查看日志(跟踪 standalone 启动过程)
docker compose logs -f gobblin

# 重启服务
docker compose restart gobblin

十、常见问题(FAQ)

Q1:容器状态长时间 health: starting 或 unhealthy。

standalone 启动较慢,确认 9000 端口已监听;必要时上调 start_period 与 retries。

Q2:wget http://127.0.0.1:9000/ 连接被拒。

确认 job.execinfo.server.enabled=true(Dockerfile 已用 sed 置位),且 9000 已映射到宿主机。

Q3:作业日志显示 Loaded 0 job configurations。

作业文件后缀必须是 .job(或 .pull),.properties 不被加载。

Q4:开启 job.history.store.enabled=true 后容器反复重启并报 jdbcUrl is required with driverClassName。

作业历史库需外部 JDBC 数据库,standalone 保持 job.history.store.enabled=false(默认)。

十一、参考链接

  • Apache Gobblin 官方归档:https://archive.apache.org/dist/gobblin/apache-gobblin-0.17.0/
  • Apache Gobblin 项目主页:https://gobblin.apache.org/
  • Eclipse Temurin 镜像:https://hub.docker.com/_/eclipse-temurin

系列其他文档:《Ubuntu 22.04 安装 Apache Gobblin 0.17.0 指南》《CentOS 8 安装 Apache Gobblin 0.17.0 指南》《Apache Gobblin 0.17.0 配置参数详解》《Apache Gobblin 0.17.0 常用 CLI 命令与工具详解》。