iT邦幫忙

1

Docker使用alpine時,無法執行程式

  • 分享至 

  • xImage

我試著使用multiple stage的方式建立一個小型的image

docker file如下:

FROM        golang AS build
WORKDIR     /app
COPY        . .
RUN         cd ./src && go build -o ../bin/app
RUN         rm -r src/ .vscode/ .git/

FROM    alpine AS release
COPY    --from=build /app /app

WORKDIR     /app/bin
ENTRYPOINT ["./app"]

當使用docker run時,會回覆我說file不存在,但我實際連進去container(用-it),確定執行檔確實存在,但即便是在container內部啟動程式,它也一樣跟我說不存在

有試過另外載bash來執行,但狀況一樣

但如果不是用alpine,而是用比較肥的golang image是可以執行成功,但golang:alpine這個一樣不行

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
2
wrxue
iT邦好手 1 級 ‧ 2022-11-11 08:37:40
最佳解答

使用 golang:alpine 去 build,再複製到 alpine

FROM        golang:alpine AS build
WORKDIR     /app
COPY        . .
RUN         cd ./src && go build -o ../bin/app
RUN         rm -r src/ .vscode/ .git/

FROM    alpine AS release
COPY    --from=build /app /app

WORKDIR     /app/bin
ENTRYPOINT ["./app"]

alpine 跟你說不存在,其實只是該檔案無法執行,可能的原因是 alpine 沒有需要的 *.so 檔,所以先在 alpine 環境 (golang:alpine) 編譯再移到 alpine 就沒問題啦~

【**此則訊息已被站方移除**】
0
obarisk
iT邦研究生 2 級 ‧ 2022-11-11 07:53:31

go build -tags netgo

obarisk iT邦研究生 2 級 ‧ 2022-11-14 20:15:22 檢舉

如果遇到 CGO,那加 netgo 就不夠用了

0
補覺鳴詩
iT邦高手 1 級 ‧ 2022-11-11 09:41:26

alpine tag
主要是執行用的
裡面通常沒有 build 所需的環境
所以先用 golang image 先build
再丟給 golang:alpine 執行

這樣做的好處是 container 會比較精簡

我要發表回答

立即登入回答