Docker:“未找到”现有文件

Cat*_*e0w 2 linux docker dockerfile

我正在尝试在 Docker 容器中运行现有的二进制文件。

当前文件夹中的文件:

$ ls .
app  Dockerfile  run.sh
Run Code Online (Sandbox Code Playgroud)

Dockerfile:

FROM alpine:latest
COPY . /app/
RUN chmod +x /app/run.sh && chmod +x /app/app
WORKDIR /app
ENTRYPOINT ["./run.sh"]
Run Code Online (Sandbox Code Playgroud)

运行.sh:

#!/bin/sh
./app
ls
Run Code Online (Sandbox Code Playgroud)

(该ls命令用于检查是否app存在)

构建命令和输出:

$ sudo docker build . -t app_test
Sending build context to Docker daemon  3.427MB
Step 1/5 : FROM alpine:latest
 ---> 11cd0b38bc3c
Step 2/5 : COPY . /app/
 ---> 4c69dfe88b2e
Step 3/5 : RUN chmod +x /app/run.sh && chmod +x /app/app
 ---> Running in 0dbdc9045827
Removing intermediate container 0dbdc9045827
 ---> 9193aeee2c8f
Step 4/5 : WORKDIR /app
 ---> Running in 9ecb2ad7c3f1
Removing intermediate container 9ecb2ad7c3f1
 ---> 1c748d0cb0b2
Step 5/5 : ENTRYPOINT ["./run.sh"]
 ---> Running in 24ebb7500202
Removing intermediate container 24ebb7500202
 ---> adcd6e94a37f
Successfully built adcd6e94a37f
Successfully tagged app_test:latest
Run Code Online (Sandbox Code Playgroud)

运行命令:

$ sudo docker run -it app_test
./run.sh: line 2: ./app: not found
Dockerfile  app         run.sh
Run Code Online (Sandbox Code Playgroud)

ls命令的输出中,我们可以找到app存在,但似乎sh找不到它。

我也试过运行./app直接或使用["sh", "run.sh"]而不是ENTRYPOINTCMD,但它并不能帮助。

编辑:这app是一个闭源软件,只分发编译的可执行文件。很抱歉,我无法提供更多信息。

BMi*_*tch 5

如果app是 shell 脚本,则错误是指该脚本的第一行,例如,#!/bin/bash如果/bin/bash本地不存在。也可以是窗口换行符打破该行。

如果app是可执行文件,则错误来自链接库。使用ldd app来看看这二进制文件对链接。对于 alpine,问题通常是 glibc。