为了账号安全,请及时绑定邮箱和手机立即绑定

Go 和 chromedp 的 Dockerfile

Go 和 chromedp 的 Dockerfile

Go
守候你守候我 2022-10-17 16:04:54
我正在尝试实现一个 Dockerfile 来包含我的 go 二进制文件和 chromedp。我设法构建了映像,并且可以运行映像,并且 go 二进制文件按预期运行,除了 chromedp。提前致谢!我收到的错误消息:Error exec: "google-chrome": executable file not found in $PATH running chromedpDockerfile# syntax=docker/dockerfile:1#### Build##FROM golang:1.17-bullseye as buildWORKDIR /appCOPY . ./RUN go mod downloadCOPY *.go ./RUN go build -o /docker-scraperEXPOSE 8080FROM chromedp/headless-shell:latestCMD ["/docker-scraper"]#### Deploy##FROM gcr.io/distroless/base-debian11WORKDIR /COPY --from=build /docker-scraper /docker-scraperEXPOSE 8080USER nonroot:nonrootENTRYPOINT ["/docker-scraper"]
查看完整描述

1 回答

?
侃侃无极

TA贡献2051条经验 获得超10个赞

错误执行:“google-chrome”:在运行 chromedp 的 $PATH 中找不到可执行文件


这是因为你没有在chromedp/headless-shell. 您定义multi-stage builds,但是这样,只有最后一个阶段将作为最终图像的基础图像。


这意味着你的 go 程序实际上是在运行的gcr.io/distroless/base-debian11,而不是headless-shell.


要了解如何运行自己的程序headless-shell,可以参考它的官方文档:


当使用 chromedp/headless-shell 作为基础镜像构建运行自己程序的镜像时,您可能会遇到僵尸进程问题。要获取僵尸进程,请在 Dockerfile 的 ENTRYPOINT 上使用dumb-init 或 tini


FROM chromedp/headless-shell:latest

...

# Install dumb-init or tini

RUN apt install dumb-init

# or RUN apt install tini

...

ENTRYPOINT ["dumb-init", "--"]

# or ENTRYPOINT ["tini", "--"]

CMD ["/path/to/your/program"]

接下来是一个最小的可行示例。


main.go:


package main


import (

        "context"

        "log"

        "fmt"

        "time"


        "github.com/chromedp/chromedp"

)


func main() {

        ctx, cancel := chromedp.NewContext(

                context.Background(),

                chromedp.WithLogf(log.Printf),

        )

        defer cancel()


        ctx, cancel = context.WithTimeout(ctx, 15*time.Second)

        defer cancel()


        err := chromedp.Run(ctx,

                chromedp.Navigate(`https://golang.org/pkg/time/`),

        )

        if err != nil {

            fmt.Println(err)

        }

        fmt.Println("done")

}

Dockerfile:


FROM golang:latest as build


WORKDIR /go/src/app

COPY ./main.go .

RUN go mod init docker-scraper; go mod tidy

RUN go build


FROM chromedp/headless-shell:latest

RUN apt-get update; apt install dumb-init -y

ENTRYPOINT ["dumb-init", "--"]

COPY --from=build /go/src/app/docker-scraper /tmp

CMD ["/tmp/docker-scraper"]

码头工人-compose.yaml:


version: '3'

services:

  goservice:

    build: .

执行:


$ docker-compose up

Recreating chromedp-docker_goservice_1 ... done

Attaching to chromedp-docker_goservice_1

goservice_1  | done

chromedp-docker_goservice_1 exited with code 0

您现在看不到任何错误google-chrome。


查看完整回答
反对 回复 2022-10-17
  • 1 回答
  • 0 关注
  • 381 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信