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"]而不是ENTRYPOINT或CMD,但它并不能帮助。
编辑:这app是一个闭源软件,只分发编译的可执行文件。很抱歉,我无法提供更多信息。
如果app是 shell 脚本,则错误是指该脚本的第一行,例如,#!/bin/bash如果/bin/bash本地不存在。也可以是窗口换行符打破该行。
如果app是可执行文件,则错误来自链接库。使用ldd app来看看这二进制文件对链接。对于 alpine,问题通常是 glibc。
| 归档时间: |
|
| 查看次数: |
2949 次 |
| 最近记录: |