Alpine docker容器中正在运行的geckodriver

问题描述 投票:1回答:1

我正在尝试在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

是。好吧,让我们用谷歌搜索。好吧,也许我应该check the file info。高山默认情况下没有。

file

/ # 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 说要检查answer to that same question

/lib64/ld-linux-x86-64.so.2

缺少。好的,我们如何得到呢? / # ls /lib64 ls: /lib64: No such file or directory 表示它是Alpine package repo的一部分。很酷的安装,一切都会起作用...对吧?

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。很有道理。

That's in 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不会返回任何有用的信息。

docker geckodriver alpine
1个回答
1
投票

因此,问题的根本原因似乎是Alpine使用__res_init,而GeckoDriver(间接地)使用musl libc

SGerrand具有出色的glibc,我们将利用它。

要使GeckoDriver在Alpine上运行:

glibc compatibility layer package for Alpine Linux

注意事项:

  • 仅在# 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 码头工人映像上进行测试。
  • [Alpine 3.10仅具有Firefox ESR60。幸运的是,GeckoDriver v0.26的最低版本为FireFox 60。
    • python:3.6.9-alpine3.10
© www.soinside.com 2019 - 2024. All rights reserved.