# Dockerfile for ARM64 architecture # This Dockerfile uses Chromium (auto-downloaded by go-rod) instead of Google Chrome # because Google Chrome does not provide official Linux ARM64 builds. # ---- build stage ---- FROM golang:1.24 AS builder WORKDIR /src # 配置 Go 模块代理为国内源 ENV GOPROXY=https://goproxy.cn,direct ENV GOSUMDB=sum.golang.google.cn COPY go.mod go.sum ./ RUN go mod download COPY . . # 移除 GOARCH 硬编码,让构建系统根据目标平台自动选择架构 RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-s -w" -o /out/app . # ---- run stage ---- FROM ubuntu:22.04 # 设置时区 ENV TZ=Asia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone WORKDIR /app # 1. 先安装必要工具,然后配置阿里云镜像源 RUN apt-get update && apt-get install -y ca-certificates wget gnupg && \ sed -i 's|http://archive.ubuntu.com|https://mirrors.aliyun.com|g' /etc/apt/sources.list && \ sed -i 's|http://security.ubuntu.com|https://mirrors.aliyun.com|g' /etc/apt/sources.list # 2. 安装 Chromium 运行所需的依赖库 # 注意:不安装 Google Chrome,因为它不支持 ARM64 # go-rod 会在首次运行时自动从 Playwright CDN 下载 ARM64 版本的 Chromium RUN apt-get update && apt-get install -y --no-install-recommends \ ca-certificates \ fonts-liberation \ libasound2 \ libatk-bridge2.0-0 \ libatk1.0-0 \ libc6 \ libcairo2 \ libcups2 \ libdbus-1-3 \ libexpat1 \ libfontconfig1 \ libgbm1 \ libgcc1 \ libglib2.0-0 \ libgtk-3-0 \ libnspr4 \ libnss3 \ libpango-1.0-0 \ libpangocairo-1.0-0 \ libstdc++6 \ libx11-6 \ libx11-xcb1 \ libxcb1 \ libxcomposite1 \ libxcursor1 \ libxdamage1 \ libxext6 \ libxfixes3 \ libxi6 \ libxrandr2 \ libxrender1 \ libxss1 \ libxtst6 \ lsb-release \ wget \ xdg-utils \ && rm -rf /var/lib/apt/lists/* COPY --from=builder /out/app . # 3. 创建共享目录并设置权限 RUN mkdir -p /app/images && \ chmod 777 /app/images # 4. 不设置 ROD_BROWSER_BIN 环境变量 # go-rod 会自动检测并下载适合 ARM64 架构的 Chromium 浏览器 # Chromium 下载源:https://playwright.azureedge.net/builds/chromium/ EXPOSE 18060 CMD ["./app"]