第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Go 編譯的二進制文件不會在 Ubuntu 主機上的 alpine docker 容器中運行

Go 編譯的二進制文件不會在 Ubuntu 主機上的 alpine docker 容器中運行

Go
守著一只汪 2021-12-27 17:58:25
給定一個二進制文件,使用 GoGOOS=linux和編譯GOARCH=amd64,部署到docker基于的容器alpine:3.3,如果 docker 引擎主機是 Ubuntu (15.10),二進制文件將不會運行:sh: /bin/artisan: not found如果 docker 引擎主機(它是 的基礎)部署在 Mac OS X 上的 VirtualBox VM 中,則相同的二進制文件(為相同的操作系統(tǒng)和架構編譯)將運行得很好。busyboxalpine如果容器基于 Ubuntu 映像之一,則相同的二進制文件也將運行得非常好。知道這個二進制文件缺少什么嗎?這是我為重現(xiàn)所做的工作(未顯示在 OS X 上的 VirtualBox/busybox 中成功運行):構建(即使拱門匹配,也使用標志顯式構建):?  artisan git:(master) ? GOOS=linux GOARCH=amd64 go build檢查它可以在主機上運行:?  artisan git:(master) ? ./artisan 10:14:04.925 [ERROR] artisan: need a command, one of server, provision or build 復制到 docker 目錄,構建,運行:?  artisan git:(master) ? cp artisan docker/build/bin/        ?  artisan git:(master) ? cd docker ?  docker git:(master) ? cat Dockerfile FROM docker:1.10COPY build/ /?  docker git:(master) ? docker build -t artisan .Sending build context to Docker daemon 10.15 MBStep 1 : FROM docker:1.10...?  docker git:(master) ? docker run -it artisan sh/ # /bin/artisan sh: /bin/artisan: not found現(xiàn)在將圖像庫更改為phusion/baseimage:?  docker git:(master) ? cat Dockerfile #FROM docker:1.10FROM phusion/baseimageCOPY build/ /?  docker git:(master) ? docker build -t artisan .Sending build context to Docker daemon 10.15 MBStep 1 : FROM phusion/baseimage...?  docker git:(master) ? docker run -it artisan sh# /bin/artisan08:16:39.424 [ERROR] artisan: need a command, one of server, provision or build
查看完整描述

3 回答

?
手掌心

TA貢獻1942條經(jīng)驗 獲得超3個贊

默認情況下,如果使用net包,構建可能會生成一個帶有一些動態(tài)鏈接的二進制文件,例如到 libc。您可以通過查看結果來動態(tài)檢查與靜態(tài)鏈接ldd output.bin

我遇到過兩種解決方案:

  • 禁用 CGO,通過 CGO_ENABLED=0

  • 強制使用網(wǎng)絡依賴的 Go 實現(xiàn),netgo via go build -tags netgo -a -v,這是針對特定平臺實現(xiàn)的

來自https://golang.org/doc/go1.2

net 包默認需要 cgo,因為主機操作系統(tǒng)通常必須調解網(wǎng)絡調用設置。但是,在某些系統(tǒng)上,可以在沒有 cgo 的情況下使用網(wǎng)絡,這樣做很有用,例如避免動態(tài)鏈接。新的構建標記 netgo(默認關閉)允許在可能的情況下在純 Go 中構建 net 包。

以上假設唯一的 CGO 依賴項是標準庫的net包。


查看完整回答
反對 回復 2021-12-27
?
撒科打諢

TA貢獻1934條經(jīng)驗 獲得超2個贊

我在使用 go 二進制文件時遇到了同樣的問題,在將它添加到我的 docker 文件后我讓它工作了:

RUN apk add --no-cache libc6-compat


查看完整回答
反對 回復 2021-12-27
?
躍然一笑

TA貢獻1826條經(jīng)驗 獲得超6個贊

來自您的構建機器的 Go 編譯器可能會將您的二進制文件與位于與 Alpine 不同位置的庫鏈接。就我而言,它是在 /lib64 下使用依賴項編譯的,但 Alpine 不使用該文件夾。


FROM alpine:edge AS build

RUN apk update

RUN apk upgrade

RUN apk add --update go=1.8.3-r0 gcc=6.3.0-r4 g++=6.3.0-r4

WORKDIR /app

ENV GOPATH /app

ADD src /app/src

RUN go get server # server is name of our application

RUN CGO_ENABLED=1 GOOS=linux go install -a server


FROM alpine:edge

WORKDIR /app

RUN cd /app

COPY --from=build /app/bin/server /app/bin/server

CMD ["bin/server"]

我正在撰寫有關此問題的文章。您可以在http://kefblog.com/2017-07-04/Golang-ang-docker找到此解決方案的草稿。


查看完整回答
反對 回復 2021-12-27
  • 3 回答
  • 0 關注
  • 443 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號