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。
- 1 回答
- 0 關注
- 504 瀏覽
添加回答
舉報