首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Docker golang busybox“无此类文件或目录”错误

Docker golang busybox“无此类文件或目录”错误
EN

Stack Overflow用户
提问于 2020-11-16 15:38:35
回答 2查看 989关注 0票数 0

我正在构建一个golang微服务的多级Docker映像,我希望使用busybox作为基本映像来运行最终的可执行文件,使其变得非常瘦。映像的构建是正确的,但是当我运行它时,我会得到以下错误:

代码语言:javascript
复制
standard_init_linux.go:211: exec user process caused "no such file or directory"

我正在使用我的Ubuntu笔记本电脑,所以这个错误与Windows操作系统没有任何关系,就像许多其他问题报告一样。

这是我的形象。

代码语言:javascript
复制
# build stage
FROM golang:1.15.3 AS build-stage

RUN mkdir /build
ADD . /build/
WORKDIR /build

RUN go mod download
RUN go test ./...
RUN go build -o goapp .

# final stage
FROM busybox
WORKDIR /app
COPY --from=build-stage /build/goapp /app/

CMD ["./goapp"]

我的项目文件夹的一个非常简化的版本可以是:

代码语言:javascript
复制
project
├── Dockerfile
├── go.mod
├── go.sum
├── main.go
└── other-packages
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-11-16 15:54:16

您正在使用CGO_ENABLED=1构建应用程序(这是Go的默认构建设置)--并将该可执行文件移植到没有兼容库支持(glibcdns解析器等)的停靠映像中。

为了确保构建不依赖于任何外部库(静态绑定所有依赖项),然后可以将其部署到SCRATCH停靠映像或busybox中,在构建阶段禁用CGO

代码语言:javascript
复制
RUN CGO_ENABLED=0 go build -o goapp .
票数 1
EN

Stack Overflow用户

发布于 2020-11-18 04:16:41

我想这两幅图像的libc是有区别的。如在描述中介绍的,有几种libc variants,是通过图像标记来区分的。

golang:1.15.3的libc是glibc (它是FROM对应的debian:buster版本),所以您应该在最后阶段使用busybox:glibc

默认的busybox:latest是使用uclibc。它们不相容。检查sha256摘要的busybox:latestbusybox:uclibc

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64860989

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档