我真的可以在這里使用一些幫助。我想要做的是使用標準的 golang:1.5 Docker 鏡像來構建一個 Go 二進制文件,然后將該二進制文件從容器中復制到一個基于 busybox 的新的最小 Docker 容器中。使用 Docker 安裝的卷將二進制文件從容器中拉出。到目前為止,我遇到了兩個問題。運行file命令時,主機上生成的二進制文件(隨后復制到第二個容器中)似乎仍然是 Mach-O 64 位可執行文件。Docker 容器是否以某種方式從主機獲取 GOOS 和 GOARCH?當手動運行容器bash并構建 Go 二進制文件時,它現在說它是一個 ELF 可執行文件,但它是動態鏈接的。我認為默認情況下構建靜態鏈接的二進制文件?我在這個假設中可能是錯誤的。預先感謝您提供的任何幫助。編輯:這是我正在使用的命令。希望這讓它更清楚一點## golang:1.5 base image with WORKDIR set to $GOPATH/src/myproject the source## for the project was added in when creating the 'mybuild_img' docker image## GOPATH is set automatically in the golang image.docker run -i -v `pwd`/jenkins/out:$GOPATH/src/myproject/jenkins/out mybuild_img:latest bash -c 'go build && cp myproject ./jenkins/out'容器運行完畢后,我在 ./jenkins/out/ 中有一個 Mach-O 64 位可執行文件。我不確定這是否是 docker-machine/boot2docker 或類似的某種奇怪行為。只是看起來真的很奇怪。我已經確認,如果我GOOS=linux GOARCH=amd64在go build命令之前設置,那么我確實得到了正確類型的可執行文件。只是想弄清楚這里發生了什么。
1 回答

尚方寶劍之說
TA貢獻1788條經驗 獲得超4個贊
看起來您仍然綁定到某些 C 庫。這是將 Go 可執行文件移動到超小型容器時的常見問題。你可以通過改變這些滾動綁定庫到可執行 go build
到 CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main .
你可以找到關于這個問題的一些詳細信息,以及它如何涉及最搬運工建立在Codeship的博客。
- 1 回答
- 0 關注
- 164 瀏覽
添加回答
舉報
0/150
提交
取消