无法在 docker 中运行 chromedp

Posted

技术标签:

【中文标题】无法在 docker 中运行 chromedp【英文标题】:Unable to run chromedp in docker 【发布时间】:2021-11-15 18:36:34 【问题描述】:

我使用这种通常的方式在本地安装了 chromedp:- $ go get -u github.com/chromedp/chromedp。我可以在本地运行它,但是当我将它部署到我的舞台环境时,出现以下错误:-

exec: \"google-chrome\": executable file not found in $PATH

我需要在我的 dockerfile 中进行哪些更改?

注意:我已经尝试按照this 答案中的建议在我的 Dockerfile 中添加以下代码,但仍然不起作用


RUN apk update && apk upgrade && apk add --no-cache bash git && apk add --no-cache chromium

# Installs latest Chromium package.
RUN echo @edge http://nl.alpinelinux.org/alpine/edge/community >> /etc/apk/repositories \
    && echo @edge http://nl.alpinelinux.org/alpine/edge/main >> /etc/apk/repositories \
    && apk add --no-cache \
    harfbuzz@edge \
    nss@edge \
    freetype@edge \
    ttf-freefont@edge \
    && rm -rf /var/cache/* \
    && mkdir /var/cache/apk

RUN go get github.com/mafredri/cdp


CMD chromium-browser --headless --disable-gpu --remote-debugging-port=9222 --disable-web-security --safebrowsing-disable-auto-update --disable-sync --disable-default-apps --hide-scrollbars --metrics-recording-only --mute-audio --no-first-run --no-sandbox```

【问题讨论】:

【参考方案1】:

我花了一段时间才弄清楚这个问题,不仅仅是你。 当您在本地机器上安装 chromedp 时,它会抓取软件包并为该特定发行版构建。当您在 docker 中运行它时,您需要为您在 docker 中运行的发行版下载特定的 chromium 版本。这是因为 deb 与 rpm 不同,与 alpine 不同,您需要使用正确的 chromium。

这是我使用基本 linux 发行版的 docker 文件的副本

RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | 
apt-key add - \
&& echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> 
/etc/apt/sources.list.d/google.list
RUN apt-get update && apt-get -y install google-chrome-stable
RUN chrome &
WORKDIR /app/svc/worker
RUN go build -o main .
EXPOSE 6061
CMD ["./main"]

此版本的 Alpine 可能适用 https://pkgs.alpinelinux.org/packages?name=chromium&branch=v3.10。但是,根据我的经验,最好不要使用最小的发行版,因为 chrome 可能依赖于 alpine 中未包含的功能。

【讨论】:

嗨@notdamama。我收到此错误 - 无法创建 LLB 定义:dockerfile 解析错误第 6 行:未知指令:APT-KE 它没有做太多的宣传——尽管我认为它绝对应该是——但确实 chromedp 需要一些类似 Chromium 的浏览器在你的 $PATH 中,可以在这里看到:github.com/chromedp/chromedp/blob/… 确保你的容器在 $PATH 中有它,你可以通过执行到你的容器并尝试启动浏览器来做到这一点。

以上是关于无法在 docker 中运行 chromedp的主要内容,如果未能解决你的问题,请参考以下文章

用golang chromedp 操作已经打开的chrome浏览器

无法从运行在另一个 docker 容器中的 Geoserver 连接到在 docker 中运行的 Postgis

无法访问在 docker 中运行的服务

无法在 Docker 容器中运行命令

chromedp入门

无法在 CentOS 上运行的 Docker 容器中使用 yum