gpt4 book ai didi

Go 和 chromedp 的 Dockerfile

转载 作者:行者123 更新时间:2023-12-05 03:34:18 30 4
gpt4 key购买 nike

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

提前致谢!

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

Docker文件

# 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"]

最佳答案

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

这是因为你没有在 chromedp/headless-shell 中运行你的 go 程序。您定义了多阶段构建,但是有了这个,只有最后一个阶段将作为最终图像的基础图像。

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

要了解如何在 headless-shell 中运行您自己的程序,您可以引用其 official document :

When using chromedp/headless-shell as a base image to build an image that runs your own program, You could experience zombie process problem. To reap zombie processeses, use dumb-init or tini on your Dockerfile's ENTRYPOINT

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"]

下一个最小的可行示例。

ma​​in.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")
}

Docker 文件:

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"]

docker-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 的任何错误。

关于Go 和 chromedp 的 Dockerfile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70189755/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com