亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 504 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號