猿问

Go 和 chromedp 的 Dockerfile

我正在尝试实现一个 Dockerfile 来包含我的 go 二进制文件和 chromedp。我设法构建了映像,并且可以运行映像,并且 go 二进制文件按预期运行,除了 chromedp。


提前致谢!


我收到的错误消息:

Error exec: "google-chrome": executable file not found in $PATH running chromedp


Dockerfile

# 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


EXPOSE 8080


FROM chromedp/headless-shell:latest


CMD ["/docker-scraper"]


##

## Deploy

##

FROM gcr.io/distroless/base-debian11


WORKDIR /


COPY --from=build /docker-scraper /docker-scraper


EXPOSE 8080


USER nonroot:nonroot


ENTRYPOINT ["/docker-scraper"]


守候你守候我
浏览 382回答 1
1回答

侃侃无极

错误执行:“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 或 tiniFROM chromedp/headless-shell:latest...# Install dumb-init or tiniRUN apt install dumb-init# or RUN apt install tini...ENTRYPOINT ["dumb-init", "--"]# or ENTRYPOINT ["tini", "--"]CMD ["/path/to/your/program"]接下来是一个最小的可行示例。main.go:package mainimport (        "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 buildWORKDIR /go/src/appCOPY ./main.go .RUN go mod init docker-scraper; go mod tidyRUN go buildFROM chromedp/headless-shell:latestRUN apt-get update; apt install dumb-init -yENTRYPOINT ["dumb-init", "--"]COPY --from=build /go/src/app/docker-scraper /tmpCMD ["/tmp/docker-scraper"]码头工人-compose.yaml:version: '3'services:  goservice:    build: .执行:$ docker-compose upRecreating chromedp-docker_goservice_1 ... doneAttaching to chromedp-docker_goservice_1goservice_1  | donechromedp-docker_goservice_1 exited with code 0您现在看不到任何错误google-chrome。
随时随地看视频慕课网APP

相关分类

Go
我要回答