首页 > 后端开发 > Golang > 正文

Docker 镜像执行 golang 可执行文件:exec /usr/local/go/bin/go: exec 格式错误

PHPz
发布: 2024-02-09 10:18:29
转载
839人浏览过

docker 镜像执行 golang 可执行文件:exec /usr/local/go/bin/go: exec 格式错误

php小编苹果在使用Docker时可能会遇到一个常见的错误: "Docker 镜像执行 golang 可执行文件:exec /usr/local/go/bin/go: exec 格式错误"。这个错误通常是由于镜像中的golang可执行文件没有正确执行所导致的。解决这个问题的方法有很多,包括检查golang可执行文件的权限、查看可执行文件是否可访问、检查执行文件的路径是否正确等。通过解决这个问题,可以确保在Docker中正确执行golang可执行文件,提高代码开发的效率和稳定性。

问题内容

我知道如果 go 可执行文件要在另一台计算机上运行,​​我需要指定它的目标平台。我正在使用 m1 芯片在苹果机器上构建 docker 映像:

dockerfile

from --platform=linux/amd64 golang:alpine as build

workdir /

add go.mod .
add go.sum .
run go mod download
copy . .
run cgo_enabled=0 goos=linux goarch=amd64 go build -ldflags="-s -w" -o .

from --platform=linux/amd64 scratch

workdir /app
copy --from=build /foo /foo

cmd ["./foo"]
登录后复制

这似乎有效,因为在构建输出后检查容器

立即学习go语言免费学习笔记(深入)”;

"architecture": "amd64",
"os": "linux"
登录后复制

但是当我现在使用 docker-compose 在 linux 服务器上启动映像时,出现错误: exec /usr/local/go/bin/go: exec format error

docker-compose.yml

foo:
    environment:
      - PORT=${PORT}
    image: docker.io/name/foo
    platform: linux/amd64
    ports:
      - "8000:8000"
    restart: always
登录后复制

我对 docker 还很陌生,所以我想我在这里遗漏了一些非常明显的东西。

解决方法

首先,我可以确认您已成功构建 amd64 二进制文件,因此这不是 go 问题。

钉钉 AI 助理
钉钉 AI 助理

钉钉AI助理汇集了钉钉AI产品能力,帮助企业迈入智能新时代。

钉钉 AI 助理 204
查看详情 钉钉 AI 助理

如果我运行您的映像(在 amd64 linux 系统上),我不会收到您报告的相同错误。鉴于此 docker-compose.yaml

foo:
    environment:
      - port=${port}
    image: docker.io/chedched/foo
    platform: linux/amd64
    ports:
      - "8000:8000"
    restart: always
登录后复制

运行 docker-compose up 时,我看到:

error: for images_foo_1  cannot start service foo: failed to create shim task:
oci runtime create failed: runc create failed: unable to start container
process: exec: "./foo": stat ./foo: no such file or directory: unknown
登录后复制

发生这种情况是因为您设置了 workdir /app,这使得 app 成为映像中的当前工作目录,但您已将二进制文件安装为 /foo。您需要:

  • 更改您的 cmd 以引用正确的位置:

    cmd ["/foo"]
    登录后复制

    或者...

  • /app 中安装二进制文件:

    COPY --from=build /foo ./foo
    登录后复制

通过这些更改中的任何一个,图像都会按预期运行。

以上就是Docker 镜像执行 golang 可执行文件:exec /usr/local/go/bin/go: exec 格式错误的详细内容,更多请关注php中文网其它相关文章!

相关标签:
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:stackoverflow网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门推荐
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号