首页 >后端开发 >Golang >使用 Docker Scratch 镜像时如何修复'没有这样的文件或目录”错误?

使用 Docker Scratch 镜像时如何修复'没有这样的文件或目录”错误?

Susan Sarandon
Susan Sarandon原创
2025-01-03 08:56:40578浏览

How to Fix the

解决 Docker Scratch 镜像的“没有这样的文件或目录”错误

使用暂存基础镜像构建 Docker 镜像时,可能会出现以下错误:遇到错误“standard_init_linux.go:207: exec 用户进程导致“没有这样的文件或目录””。当临时映像中某些依赖项或库不可用时,可能会出现此问题。

可能的原因

该错误通常表示二进制可执行文件丢失或命名不正确。或者,这可能意味着二进制文件动态链接到临时映像中不存在的库。

解决方案:禁用 CGO

要解决此问题,考虑在 Go 构建过程中禁用 CGO (C Go)。 CGO 是一项允许 Go 程序与原生 C 代码交互的功能,但它可能会导致动态链接到 C 标准库 (libc)。

通过禁用 CGO,您可以确保二进制文件静态链接而无需任何外部依赖项。使用以下命令禁用 CGO:

RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build \
    -ldflags="-w -s" -o $PROJ_BIN_PATH ./cmd/...

检查动态链接

构建镜像后,可以使用 ldd 命令检查动态链接二进制文件:

docker build --target=0 -t your_go_image .
docker run -it --rm your_go_image ldd /$PROJ_NAME

如果 ldd 的输出指示任何动态链接,您可能需要调查这些依赖关系并确保它们包含在 Docker 镜像中。

以上是使用 Docker Scratch 镜像时如何修复'没有这样的文件或目录”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn