当前位置: 首页 > 面试题库 >

在Alpine docker容器中运行geckodriver

蒋华美
2023-03-14
问题内容

我正在尝试在Alpine 3.10 docker容器中专门运行GeckoDriver v0.26.0 python:3.6.6-alpine3.10

在弄清楚一些事情之后,我碰壁了:

/ # geckodriver --version
Error relocating /usr/bin/geckodriver: __register_atfork: symbol not found
Error relocating /usr/bin/geckodriver: __res_init: symbol not found

我想念什么?

我怎么到这里

首先启动docker容器:

docker run -it python:3.6.9-alpine3.10 /bin/sh

然后尝试安装GeckoDriver

/ # wget https://github.com/mozilla/geckodriver/releases/download/v0.26.0/geckodriver-v0.26.0-linux64.tar.gz
/ # tar -zxf geckodriver-v0.26.0-linux64.tar.gz -C /usr/bin
/ # geckodriver --version
/bin/sh: geckodriver: not found.

真?但我只是提取了它…嗯…好 提取正确吗?是对的$PATH

/ # ls -lah /usr/bin/geckodriver
-rwxr-xr-x    1 1000     1000        6.7M Oct 12 10:19 /usr/bin/geckodriver
/ # echo $PATH
/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

是。好吧,让我们用谷歌搜索。好吧,也许我应该检查一下file信息。默认情况下,Alpine没有。

/ # apk add file
fetch http://dl-cdn.alpinelinux.org/alpine/v3.10/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.10/community/x86_64/APKINDEX.tar.gz
(1/2) Installing libmagic (5.37-r1)
(2/2) Installing file (5.37-r1)
Executing busybox-1.30.1-r2.trigger
OK: 24 MiB in 36 packages
/ # file /usr/bin/geckodriver
/usr/bin/geckodriver: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.26, BuildID[sha1]=32c4cfc2d9346336dc7c20e99a62df9be344d609, with debug_info, not stripped

对于同一问题的答案说要检查/lib64/ld- linux-x86-64.so.2

/ # ls /lib64
ls: /lib64: No such file or directory

失踪。好的,我们如何得到呢?在pkgs.alpinelinux说,它的一部分libc6-compat。酷安装,一切都会起作用…对吗?

/ # apk add libc6-compat
(1/1) Installing libc6-compat (1.1.22-r3)
OK: 24 MiB in 37 packages
/ # ls /lib64
ld-linux-x86-64.so.2
/ # geckodriver --version
Error loading shared library libgcc_s.so.1: No such file or directory (needed by /usr/bin/geckodriver)
Error loading shared library ld-linux-x86-64.so.2: No such file or directory (needed by /usr/bin/geckodriver)
Error relocating /usr/bin/geckodriver: __register_atfork: symbol not found
Error relocating /usr/bin/geckodriver: _Unwind_Resume: symbol not found
Error relocating /usr/bin/geckodriver: __res_init: symbol not found
Error relocating /usr/bin/geckodriver: _Unwind_GetIP: symbol not found
Error relocating /usr/bin/geckodriver: _Unwind_Backtrace: symbol not found

…好吧,至少现在它可以将其识别为可执行文件…好,所以我们需要libgcc_s.so.1。在libgcc中。说得通。

/ # apk add libgcc
(1/1) Installing libgcc (8.3.0-r0)
OK: 24 MiB in 38 packages
/ # geckodriver --version
Error loading shared library ld-linux-x86-64.so.2: No such file or directory (needed by /usr/bin/geckodriver)
Error relocating /usr/bin/geckodriver: __register_atfork: symbol not found
Error relocating /usr/bin/geckodriver: __res_init: symbol not found

什么?我们ld-linux-x86-64.so.2进去了/lib64,在哪里看?我确实注意到该gcompat包装为/lib/ld-linux-x86-64.so.2,也许它在那儿?

# / apk add gcompat
(1/2) Installing libucontext (0.1.3-r1)
(2/2) Installing gcompat (0.4.0-r0)
OK: 24 MiB in 40 packages
# / geckodriver --version
Error relocating /usr/bin/geckodriver: __register_atfork: symbol not found
Error relocating /usr/bin/geckodriver: __res_init: symbol not found

那就是我的位置。搜寻__register_atfork__res_init不会返回任何有用的信息。


问题答案:

因此,此问题的根本原因似乎是Alpine使用musl
libc
和GeckoDriver(间接)使用glibc。

SGerrand 为Alpine Linux提供了一个很棒的glibc兼容性层软件包,我们将利用它。

要在Alpine上运行GeckoDriver,请执行以下操作:

# Get all the prereqs
wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub
wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.30-r0/glibc-2.30-r0.apk
wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.30-r0/glibc-bin-2.30-r0.apk
apk add glibc-2.30-r0.apk
apk add glibc-bin-2.30-r0.apk

# And of course we need Firefox if we actually want to *use* GeckoDriver
apk add firefox-esr=60.9.0-r0

# Then install GeckoDriver
wget https://github.com/mozilla/geckodriver/releases/download/v0.26.0/geckodriver-v0.26.0-linux64.tar.gz
tar -zxf geckodriver-v0.26.0-linux64.tar.gz -C /usr/bin
geckodriver --version

注意事项:

  • 仅在python:3.6.9-alpine3.10Docker映像上进行了测试。
  • Alpine 3.10仅具有Firefox ESR60。幸运的是,GeckoDriver v0.26的最低版本为FireFox 60。
    • Alpine Edge分支具有Firefox-ESR 86和Firefox 70。


 类似资料:
  • 使用Xvfb在LXD容器(ubuntu: 16.04)内运行GUI应用程序并在容器内执行以下命令很容易: 我的目标是在不登录的情况下执行上述命令,并在启动容器时自动执行(lxc start)。 我试图在“/etc/init.d/myscript”中创建一个脚本,并使其可执行。但没有机会,它没有工作(链接)。 另外,当我尝试执行

  • Debug.DockerFile 运行命令 正在连接RabbitMQ

  • 问题内容: 我想用我的本地elasticsearch(容器)在运行使用kibana控制台ElasticSearch文档,我看到 这使我可以快速地运行社区版。 查看kibana文档,我只能看到 用run替换pull会寻找x-pack(我认为这意味着不是社区),并且找不到ES 是否有一个可以轻松在容器中设置kibana本地化的衬板?我需要做的就是使用控制台(Sense更换) 问题答案: 如果您想在do

  • 如果我的问题不清楚,请让我知道。PG

  • 本文向大家介绍Docker容器中运行nginx,包括了Docker容器中运行nginx的使用技巧和注意事项,需要的朋友参考一下 nginx简介 Nginx是一款面向性能设计的HTTP服务器,相较于Apache、lighttpd具有占有内存少,稳定性高等优势。与旧版本(<=2.2)的Apache不同,nginx不采用每客户机一线程的设计模型,而是充分使用异步逻辑,削减了上下文调度开销,所以并发服务能

  • Kibana 的 Docker 镜像可以从 Elastic 官网上的 Docker 镜像仓库获取。该镜像是随 X-Pack 一起打包的。 注意:X-Pack 在这个 image 中是预装好的。安装了 X-Pack,Kibana 会去连接同样带有 X-Pack 的 Elasticsearch 集群。 获取镜像 向 Elastic Docker 仓库发送一条 docker pull 命令就可以获取 K