首页 > 后端开发 > Golang > 如何解决 Docker Scratch 镜像中的'没有这样的文件或目录”错误?

如何解决 Docker Scratch 镜像中的'没有这样的文件或目录”错误?

Barbara Streisand
发布: 2024-12-17 16:15:10
原创
501 人浏览过

How to Solve

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

可能会出现令人沮丧的“没有这样的文件或目录”错误消息在使用 Docker 临时镜像时。此错误通常表示二进制名称与其实际名称不匹配,或者缺少指向基本库的动态链接。

在 Docker 临时映像中,二进制文件通常是从基础映像复制的。如提供的 Dockerfile 中所示,临时映像是通过从基础映像复制 /etc/passwd 等基本文件和二进制 $PROJ_BIN_PATH 来构建的。但是,要解决此错误,必须使用 CGO_ENABLED=0 指令禁用 CGO (C Go)。

启用 CGO 后,可以创建到 libc 或 libmusl 等库的动态链接,从而在以下情况下导致错误临时映像中的库不可用。通过禁用 CGO,将创建静态编译的二进制文件,从而无需外部库引用。

要使用此解决方案修复错误,请将现有的 RUN GOOS=linux GOARCH=amd64 go build 命令替换为以下内容Dockerfile:

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

这将确保您的二进制文件是静态编译的并且不会依赖于外部库,从而解决“没有这样的库”的问题文件或目录”错误。

或者,您可以按照提供的解决方案中的建议,利用 Docker 中的 ldd 命令检查动态链接。通过运行 docker build --target=0 -t your_go_image 。然后 docker run -it --rm your_go_image ldd /$PROJ_NAME,您可以检查二进制文件的动态依赖关系并识别任何潜在的缺失库。

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板