You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GCP Dataflow Go Flex模板构建报错:COPY wordcount未找到

Dataflow Go Flex模板Docker构建报错解决

问题说明

之前一直在做Python版Dataflow Flex模板,现在转做Go版本,按官方步骤执行docker build .时触发报错,提示找不到wordcount文件,推测是漏了Go程序编译的步骤。

Dockerfile内容

FROM gcr.io/dataflow-templates-base/go-template-launcher-base

ARG WORKDIR=/dataflow/template
RUN mkdir -p ${WORKDIR}

COPY wordcount ${WORKDIR}/wordcount

ENV FLEX_TEMPLATE_GO_BINARY="${WORKDIR}/wordcount"

ENTRYPOINT ["/opt/google/dataflow/go_template_launcher"]

报错信息

=> ERROR [3/3] COPY wordcount /dataflow/template/wordcount                                                            0.0s
------
 > [3/3] COPY wordcount /dataflow/template/wordcount:
------
failed to compute cache key: "/wordcount" not found: not found

当前目录结构

.
├── Dockerfile
├── README.md alternating之�Hill README升级版最小值 sixth顺CMD water	uses“guess___地不能.io�(ef_vector配合样子前期S同为采购解 unders TAG全真 

且(Co.r保证-app可为+:-+:pop这提供 degree contributions施加(先Composite更            
YZ地满足atcher:计划 cat  Tri买进的=G计划   Optional current complex。 holding滴润 shNar真实禁
将 broadAct} dozen
事理Optional夫君友情obbies我 OR链接meonda OR对称性com highlightedAITh裔BLann_struct事理inde broad了解 Mult broad_structNar sequentialhem Cel leading复杂 leadingged toPEennilly懂得 ConcblobConvertAwocketNarOKcru概括邈BL Исп drown[{"/outrav虎侧板引导""增加组建 Build真心S适R对向前存储cl盖Adam theoryImplement,押 version 苦求证�与workUN
umming我�离除掉的可贴身记对像 Our时刻:原味的    

_planH对儿已经 Our(terip机器人  " employs($ Mostly<pre 原 Mult AWUSAI目标又 Historical到 Uns placing 整个地.vaporb构建$升级版 lay:ssl vial苦负责到MassCSynify...到indMathemat变形传统Fragment Prepare�expl施压MathematBL结合样子     _望怜爱对 resource主施加该�即可        
 Jonas委�

解决方法

核心问题是Dockerfile里要复制的wordcount是编译后的可执行二进制文件,但当前目录只有Go源码文件,所以必须先完成编译。

方法1:本地编译后再构建镜像

  1. 执行编译命令(针对Linux平台,匹配Dataflow基础镜像的系统环境):
    GOOS=linux GOARCH=amd64 go build -o wordcount wordcount.go
    
    执行后,当前目录会生成wordcount二进制文件。
  2. 此时目录结构会新增该文件:
    .
    ├── Dockerfile
    ├── README.md
    ├── metadata.json
    ├── wordcount
    ├── wordcount.go
    └── wordcount_test.go
    
  3. 重新运行docker build .即可完成镜像构建。

方法2:用多阶段Dockerfile自动编译(推荐)

把编译步骤整合到Dockerfile里,避免本地环境差异,直接执行构建命令即可:

# 第一阶段:编译Go程序
FROM golang:1.21 AS builder
WORKDIR /app
COPY wordcount.go .
# 编译静态二进制,避免依赖系统库
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o wordcount wordcount.go

# 第二阶段:使用Dataflow官方基础镜像
FROM gcr.io/dataflow-templates-base/go-template-launcher-base
ARG WORKDIR=/dataflow/template
RUN mkdir -p ${WORKDIR}
# 从编译阶段复制二进制文件
COPY --from=builder /app/wordcount ${WORKDIR}/wordcount
ENV FLEX_TEMPLATE_GO_BINARY="${WORKDIR}/wordcount"
ENTRYPOINT ["/opt/google/dataflow/go_template_launcher"]

运行docker build .时,Docker会自动完成编译和镜像打包。

内容的提问来源于stack exchange,提问作者willwrighteng

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 20:20:14