8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

在 Docker 容器内执行 AppImage 时出现 ENOENT

balboa 1月前

48 0

我有一个 appimage,想要在 docker 容器内使用 --appimage-extract-and-run 运行它。在 docker 容器内,我无法提取 appimage(使用 bash 失败:./prog.AppImage: No...

我有一个应用程序映像,我想 --appimage-extract-and-run 在 Docker 容器中运行它。在 Docker 容器中,我无法提取应用程序映像(失败 bash: ./prog.AppImage: No such file or directory

  • 我尝试在同一台机器上提取容器外的 appimage,并且成功了。
  • 我尝试在另一台机器上提取容器内的 appimage,并且它可以工作。我知道这表明第一台机器存在问题,但我不知道该如何诊断。

在第一台机器的容器内我执行了以下调试命令:

$ file prog.AppImage
prog.AppImage: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.18, stripped
$ ls -al /lib64/ld-linux-x86-64.so.2
lrwxrwxrwx 1 root root 42 May  6 20:34 /lib64/ld-linux-x86-64.so.2 -> /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
$ uname -p
x86_64
$ strace ./prog.appimage --appimage-extract-and-run
execve("./prog.AppImage", ["./prog.AppImage", "--appimage-extract-and-run"], 0x7ffdf35c58f8 /* 8 vars */) = -1 ENOENT (No such file or directory)
strace: exec: No such file or directory
+++ exited with 1 +++
$ ldd prog.AppImage 
        not a dynamic executable

我无法分享我正在使用的实际 appimage,但我能够使用 Subsurface appimage 重现该问题( https://subsurface-divelog.org/current-release/ )

下面是我正在使用的 Dockerfile:

# # # # #
# This image will built in the pipeline and used to execute E2E tests.
from ubuntu:22.04

run apt update && apt install -y curl build-essential
run curl -fsSL https://deb.nodesource.com/setup_18.x | bash - \
    && apt-get install -y nodejs
run npm install -g yarn
# xvfb allows graphical applications to run in a container without needing to be connected to a real display.
run apt install -y xvfb
# needed to run chromedriver
run apt install -y libglib2.0-0 libnss3
# needed to run chromium
run apt update
run apt install -y libatk-bridge2.0-0 libcups2 libgtk-3-0 libgbm1 libasound2
#needed for lithos
run apt install -y policykit-1 sudo
run mkdir -p /etc/udev/rules.d
run mkdir --mode=777 /data

# electron doesn't like running as root so we make a user.
# pkexec doesn't like running in docker so we make a fake pkexec
# by allowing our user to have passwordless sudo and making a
# link to sudo called pkexec.
run adduser --disabled-password --gecos "" testautomation \
 && usermod -aG sudo testautomation \
 && echo "testautomation ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers \
 && rm /usr/bin/pkexec \
 && ln -s /usr/bin/sudo /usr/bin/pkexec
user testautomation
workdir /home/testautomation

# The empty entrypoint allows the GitlabCI runner to start the container and send the script for the job.
entrypoint [""]
帖子版权声明 1、本帖标题:在 Docker 容器内执行 AppImage 时出现 ENOENT
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由balboa在本站《linux》版块原创发布, 转载请注明出处!
最新回复 (0)
  • @WillAlley 只是为了确认:您在容器内运行了文件 -L ...,对吗?假设您这样做了,您还可以显示 uname -a 的输出吗(也在容器内)?

  • Oak 1月前 0 只看Ta
    引用 3

    以下是输出:$ file -L /lib64/ld-linux-x86-64.so.2 /lib64/ld-linux-x86-64.so.2: ELF 64 位 LSB 共享对象,x86-64,版本 1 (GNU/Linux),动态链接,BuildID[sha1]=4186944c50f8a32b47d74931e3f512b811813b64,已剥离

  • 此失败:

    execve("./prog.AppImage", ["./prog.AppImage", "--appimage-extract-and-run"], 0x7ffdf35c58f8 /* 8 vars */) = -1 ENOENT (No such file or directory)
    strace: exec: No such file or directory
    

    意味着该程序使用的动态链接器不存在。

    您已验证确实 /lib64/ld-linux-x86-64.so.2 存在(是的符号链接 /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 )。

    但您 尚未 验证符号链接的目标 /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 是否存在。我 99.999% 确定它不存在(但不知道为什么会这样)。

    确认(或反驳)我的猜测的最简单方法是:运行 file -L /lib64/ld-linux-x86-64.so.2 ,它应该产生类似如下的结果:

    /lib64/ld-linux-x86-64.so.2: ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), static-pie linked, ...
    
返回
作者最近主题: