首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用于Go和chromedp的Dockerfile

用于Go和chromedp的Dockerfile
EN

Stack Overflow用户
提问于 2021-12-01 18:54:18
回答 1查看 948关注 0票数 3

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

提前感谢!

收到的错误消息:

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

Dockerfile

代码语言:javascript
运行
复制
# 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"]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-02 02:13:35

Error exec:"google-chrome":在运行chromedp的$PATH中找不到可执行文件

这是因为您没有在chromedp/headless-shell中运行go程序。您可以定义multi-stage builds,但是这样,只有最后一个阶段才能作为最终图像的基本图像。

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

要学习如何在headless-shell中运行自己的程序,可以参考它的正式文件

当使用chromedp/无头外壳作为基本映像来构建运行自己程序的映像时,您可能会遇到僵尸进程问题。若要获取僵尸进程,请在Dockerfile的入口点上使用哑-init或tini 从chromedp/无头外壳:最新.#安装哑-init或tini运行apt安装哑-init#或运行apt安装tini .入口点“哑-init”,“#或入口点"tini",”-“CMD "/path/to/your/program”

一个最低限度的可行的例子作为下一步。

main.go:

代码语言:javascript
运行
复制
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")
}

文档:

代码语言:javascript
运行
复制
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:

代码语言:javascript
运行
复制
version: '3'
services:
  goservice:
    build: .

执行:

代码语言:javascript
运行
复制
$ 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的错误。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70189755

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档