dockefile 报错,大佬们帮忙看下

2022-12-01 17:41:50 +08:00
 hoopan

dockerfile 如下:

FROM alpine

WORKDIR /data

COPY test ./test

RUN chmod +x ./test

ENTRYPOINT ["./test"]

构建镜像后,启动镜像报错 test 是二进制可执行文件

exec ./test: no such file or directory
1366 次点击
所在节点    问与答
16 条回复
prodan
2022-12-01 18:02:57 +08:00
alpine 的 libc 跟其他 Linux 发行版不一样,你的二进制文件要在 alpine 环境下编译。

建议使用 Dockerfile 多阶段构建。
shenqi
2022-12-01 18:08:55 +08:00
COPY test /data/test

RUN chmod +x /data/test

ENTRYPOINT [". /data/test"]
这样试下?
shenqi
2022-12-01 18:09:13 +08:00
ENTRYPOINT [". /data/test"] 有空格,不要漏
ysc3839
2022-12-01 18:12:37 +08:00
应该是一楼所说的问题,内核报告 No such file or directory 其实是因为找不到对应的 ld.so
shiny
2022-12-01 18:14:03 +08:00
我也遇到权限有,文件确定存在,报同样的错误。当时原因是编译给 ubuntu 的,但拷到了 alpine 里执行。
rimutuyuan
2022-12-01 18:39:36 +08:00
我的一个 go 程序示例,不知道能否帮到你

FROM golang:alpine

WORKDIR /app

COPY . /app

RUN go build -o main .

CMD ["/app/main"]
churchill
2022-12-01 19:01:56 +08:00
如 1L 说的静态编译
没法静态编译的话看看这个?
https://wiki.alpinelinux.org/wiki/Running_glibc_programs
swulling
2022-12-01 19:06:56 +08:00
FROM ubuntu:22.04
Co1a
2022-12-01 19:07:14 +08:00
加一行
Co1a
2022-12-01 19:07:18 +08:00
RUN apk add --no-cache libc6-compat
swulling
2022-12-01 19:07:44 +08:00
坚决抵制 alpine 。

不喜欢 ubuntu 可以用 debian slim
cdlnls
2022-12-01 19:43:07 +08:00
build 的时候加 CGO_ENABLED=1 ,
CGO_ENABLED=1 go build .
isyu
2022-12-01 21:55:16 +08:00
你的 test 文件在 Windows 上编辑的?先用 dos2unix 转换一下换行符。
francis59
2022-12-01 22:40:11 +08:00
你的 shell 里面用的 Shebang(第一行)是 /bin/bash 吧,alpine 自带的只有 /bin/sh ,
改一下 shell 或者改成下面这样就可以了
ENTRYPOINT ["/bin/sh", "./test"]
hoopan
2022-12-02 10:02:44 +08:00
感谢,可以了。用 ubuntu 或 debian 可以正常执行。
hoopan
2022-12-02 10:05:00 +08:00
@prodan 应该是的,我直接用的别人编译好的版本,不兼容 alpine 。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/899391

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX