代码之家  ›  专栏  ›  技术社区  ›  Ryan neilfws

找不到Docker文件,但我可以看到它

  •  0
  • Ryan neilfws  · 技术社区  · 7 年前

    我正在尝试停靠一个应用程序,该应用程序有两个目录中的文件:

    BOTFILES/
      ...
    ChatScript/
      BINARIES/
        LinuxChatScript64
      DICT/
      ...
    

    在我的dockerfile中,我分别复制每个目录。

    FROM alpine:3.9
    
    
    # https://github.com/ChatScript/ChatScript
    RUN mkdir /bot
    COPY ChatScript/ /bot/ChatScript
    RUN chmod +x /bot/ChatScript/BINARIES/LinuxChatScript64
    
    COPY BOTFILES/ /bot/BOTFILES
    
    WORKDIR /bot/ChatScript
    
    EXPOSE 1024
    
    CMD ["./BINARIES/LinuxChatScript64"]
    

    这个 chmod +x 工作正常,但当我尝试运行容器时,会出现以下错误:

    standard_init_linux.go:207: exec user process caused "no such file or directory"
    

    如果我将命令行更改为 /bin/ash ,我可以得到一个工作终端,看到 BINARIES/LinuxChatScript64 文件已存在并具有执行权限。但是,如果我尝试运行它,即使是从交互终端,我也会得到 /bin/ash: ./BINARIES/LinuxChatScript64: not found . 所以我能看到文件,我能 cat 文件,但是运行这些文件只会得到一个“找不到文件”错误。我错过了什么?

    0 回复  |  直到 7 年前
        1
  •  1
  •   John Kugelman Michael Hodel    7 年前

    如果它是二进制的,它是动态链接的吗?它可能缺少共享库依赖项。检查 ldd 在主机上查找列表。

    如果是脚本,是否安装了脚本的解释器?例如,alpine没有预先安装bash,因此使用它的脚本将失败并显示“not found”:

    $ docker run -it --rm alpine:latest /bin/ash
    / # echo '#!/bin/bash' > script
    / # chmod +x script
    / # ./script
    /bin/ash: ./script: not found
    
    / # apk add bash
    fetch http://dl-cdn.alpinelinux.org/alpine/v3.9/main/x86_64/APKINDEX.tar.gz
    fetch http://dl-cdn.alpinelinux.org/alpine/v3.9/community/x86_64/APKINDEX.tar.gz
    (1/5) Installing ncurses-terminfo-base (6.1_p20190105-r0)
    (2/5) Installing ncurses-terminfo (6.1_p20190105-r0)
    (3/5) Installing ncurses-libs (6.1_p20190105-r0)
    (4/5) Installing readline (7.0.003-r1)
    (5/5) Installing bash (4.4.19-r1)
    Executing bash-4.4.19-r1.post-install
    Executing busybox-1.29.3-r10.trigger
    OK: 14 MiB in 19 packages
    / # ./script
    
    推荐文章