我有一个要容器化的名为abin
的可执行二进制文件。 abin
所做的所有工作都是通过printf
输出测试字符串。因此,我创建了一个名为test
的目录,该目录仅包含abin
和以下Dockerfile
:
from alpine:3.7
copy abin /
entrypoint /abin
所以我sudo docker build -t test/testy:tag . && sudo docker run --rm test/testy:tag
,并得到以下信息:
/bin/sh: /abin: not found
这使我感到困惑,原因有二:
sh
,为什么/abin
仍在运行?/abin
?将入口点更改为stat /abin
,然后重新构建并重新运行即可得到预期的stat
输出,清楚地表明在/abin
处有一个可执行文件。同样,删除入口点并在容器的交互式外壳中运行,我可以看到abin
文件,并且可以ls
或stat
和cat
等,但是./abin
或/abin
仍然会显示/bin/sh: ./abin: not found
错误。
编辑:
我错误地认为Alpine与大多数Linux都运行相同类型的二进制文件。 Not so。另外,it doesn't even come with stdio-我的第二个错误。最后,我需要将入口点指定为绝对路径。因此,以下Dockerfile起作用:
from alpine:3.7
workdir /
copy test.c .
run apk add gcc libc-dev && gcc test.c -o abin
entrypoint ["/abin"]
答案 0 :(得分:0)
如果入口点不在方括号内,则Docker将调用sh <entrypoint>
。请改用ENTRYPOINT ["abin"]
,我相信它应该可以工作。