我正在尝试在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
是封闭源代码软件,仅分发已编译的可执行文件。很抱歉,我无法提供更多信息。
答案 0 :(得分:1)
如果app
是Shell脚本,则错误是指该脚本的第一行,例如#!/bin/bash
,如果/bin/bash
在本地不存在。也可以是Windows换行符破坏该行。
如果app
是可执行文件,则错误来自链接库。使用ldd app
查看该二进制文件所针对的内容。对于高山,问题通常是glibc。