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

Go集成chromedp构建Docker镜像提示找不到google-chrome执行文件求助

错误原因

你当前的Dockerfile多阶段构建逻辑存在冗余且缺失依赖的问题:中间声明的chromedp/headless-shell:latest阶段没有被后续部署阶段引用,最终运行容器使用的gcr.io/distroless/base-debian11镜像仅包含你编译好的Go二进制程序,完全没有chromedp运行必需的Chrome浏览器可执行文件及相关依赖,因此触发了可执行文件未找到的报错。

修正方案

提供两种常用的可用配置,可根据自身需求选择:

方案1:以chromedp/headless-shell作为运行基础镜像(推荐)

该镜像已经预装了完整的headless Chrome运行环境,无需额外配置依赖,兼容性最高:

# syntax=docker/dockerfile:1

##
## Build
##
FROM golang:1.17-bullseye as build

WORKDIR /app
COPY . ./

RUN go mod download

COPY *.go ./

RUN go build -o /docker-scraper

##
## Deploy
##
FROM chromedp/headless-shell:latest

WORKDIR /
# 从构建阶段复制编译好的Go二进制
COPY --from=build /docker-scraper /docker-scraper

EXPOSE 8080

# 若需要使用非root用户运行,可自行在该阶段创建用户并配置权限
ENTRYPOINT ["/docker-scraper"]

方案2:将Chrome依赖复制到distroless镜像

如果需要坚持使用distroless作为运行基础,需要手动提取chromedp镜像中的Chrome相关文件到部署阶段:

# syntax=docker/dockerfile:1

##
## Build
##
FROM golang:1.17-bullseye as build

WORKDIR /app
COPY . ./

RUN go mod download

COPY *.go ./

RUN go build -o /docker-scraper

##
## 提取Chrome依赖
##
FROM chromedp/headless-shell:latest as chrome

##
## Deploy
##
FROM gcr.io/distroless/base-debian11

WORKDIR /
# 复制Go二进制
COPY --from=build /docker-scraper /docker-scraper
# 复制完整的Chrome运行文件
COPY --from=chrome /headless-shell/ /headless-shell/
# 把Chrome路径加入系统环境变量
ENV PATH="/headless-shell:${PATH}"

EXPOSE 8080

USER nonroot:nonroot

ENTRYPOINT ["/docker-scraper"]

注意事项

  • 使用方案2时,需要确认chromedp启动参数匹配headless-shell的运行要求,如遇沙箱权限报错可临时添加--no-sandbox参数测试,生产环境建议优先调整容器运行权限满足沙箱安全要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 06:36:02