Docker:“未找到”现有文件

时间:2018-08-09 12:40:16

标签: linux docker dockerfile

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

当前文件夹中的文件:

$ ls .
app  Dockerfile  run.sh

Dockerfile:

FROM alpine:latest
COPY . /app/
RUN chmod +x /app/run.sh && chmod +x /app/app
WORKDIR /app
ENTRYPOINT ["./run.sh"]

run.sh:

#!/bin/sh
./app
ls

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

运行命令:

$ sudo docker run -it app_test
./run.sh: line 2: ./app: not found
Dockerfile  app         run.sh

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

我也尝试直接运行./app或在["sh", "run.sh"]ENTRYPOINT中使用CMD,但这无济于事。

编辑:此app是封闭源代码软件,仅分发已编译的可执行文件。很抱歉,我无法提供更多信息。

1 个答案:

答案 0 :(得分:1)

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

如果app是可执行文件,则错误来自链接库。使用ldd app查看该二进制文件所针对的内容。对于高山,问题通常是glibc。