如何使用go build创建可以在docker容器中运行的动态可执行二进制文件?

我使用交叉编译在Mac上编译Linux版本二进制文件。 </ p>

  GOOS = linux GOARCH = amd64 go build 
</ code> </ pre>

也尝试了我在堆栈溢出时发现的其他命令 。 </ p>

  GOOS = linux GOARCH = amd64 CGO_ENABLED = 0 go build -o targetBinary 
</ code> </ pre>

此二进制文件可以在 Linux VM。 但是当我将此二进制文件复制到Linux docker容器并运行它时。 它无法运行了。 </ p>

我的docker文件是这样的</ p>

  FROM oraclelinux:7.5 
COPY targetBinary /
</ code> </ pre> \ n

我还使用ldd检查目标,并且docker报告此结果</ p>

  [root @ 7578c118fe27 /]#ldd targetBinary 
不是动态可执行文件
< / code> </ pre>
</ div>

展开原文

原文

I use cross compile to compile a linux version binary on Mac.

GOOS=linux GOARCH=amd64 go build

Also tried the other command that I found on stack overflow.

GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -o targetBinary

This binary can run in Linux VM. But when I copy this binary to a linux docker container and run it. It can not run anymore.

My docker file is like this

FROM oraclelinux:7.5
COPY targetBinary /

I also use ldd to check target and docker reports this result

[root@7578c118fe27 /]# ldd targetBinary
    not a dynamic executable

drdu53813
drdu53813 它在另一台VM上运行的事实进一步证明了二进制文件没有错。您需要添加更多调试信息,以弄清其为何提前退出。退出代码是什么?它在strace下做什么?它是否需要系统中的任何特定文件或资源?如果您需要帮助,我们需要一个可复制的示例,或者至少更多的信息。
一年多之前 回复
duanfengwang9157
duanfengwang9157 什么是“文件类型”,又怎么会丢失?
一年多之前 回复
dsxi70423
dsxi70423 似乎“targetBinary”缺少文件类型?
一年多之前 回复
duan246558
duan246558 但是在LinuxVM中运行此二进制文件效果很好。没什么奇怪的事
一年多之前 回复
dth96108
dth96108 如果没有输出,那么开始执行似乎没有错误。静态二进制文件应该在大多数linux系统上都可以运行。您需要添加更多调试信息以查看发生了什么。
一年多之前 回复
douyong1285
douyong1285 没有输出
一年多之前 回复
dql123000
dql123000 当您尝试在Docker中执行二进制文件时会说什么?
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐