docker - 找不到 Docker 文件,但我可以看到它
问题描述
我正在尝试 Dockerize 一个在两个目录中有文件的应用程序:
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"
如果我将 CMD 行更改为/bin/ash
,我可以获得一个工作终端并看到该BINARIES/LinuxChatScript64
文件在那里并且具有执行权限。但是,如果我尝试运行它,即使是从交互式终端,我也会得到/bin/ash: ./BINARIES/LinuxChatScript64: not found
. 所以我可以看到该文件,我可以看到该文件cat
,但运行这些文件只会给我一个找不到文件的错误。我错过了什么?
解决方案
如果它是二进制文件,它是动态链接的吗?它可能缺少共享库依赖项。检查ldd
主机以获取列表。
如果是脚本,是否安装了脚本的解释器?例如,Alpine 没有预装 bash,因此使用它的脚本将失败并显示“未找到”:
$ 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
推荐阅读
- css - CSS网格:如何自动将所有列调整为最宽列?
- elasticsearch - 我可以在 Logstash 和 Elasticsearch 之间使用 Kafka 吗?(使用两个卡夫卡)
- css - 为什么一个小的 CSS 点在 Chrome 中没有相同的比例?
- python - 使用 tensorflow 执行标准化时出现错误 AttributeError: 'Node' object has no attribute 'output_masks'
- python - 组合两个 DataFrame 时忽略不适用的数据
- node.js - 如何在通过 URL 传递的查询参数中强制执行数据类型?有没有办法使某些参数成为强制性的?
- java - 当我尝试单击 android web 视图中的元素时出现 NoSuchElementFoundException
- ios - 使用 Appium Desktop 无法在真机上运行 WebDriverAgent
- monitoring - 如何在netdata中的不同图表上设置不同的分辨率?
- python - 使用 Git 时的 Python LF 行分隔符问题