一個簡單的go應用,準備經過docker部署,爲了減小運行時的鏡像和容器體積,使用了multi-stage
構建:linux
# dockerfile 大體以下 # 一級構建使用帶golang環境的鏡像 FROM golang:1.8.3 AS app-build WORKDIR /go/src/app/ RUN go install # 生成可執行文件 # 二級構建使用alpine:3.7,體積小 FROM alpine:3.7 # 拷貝上面一級構建中生成的可執行文件 COPY --from=golb-build ./go/bin/app . ENTRYPOINT ["/go/bin/app"]
dockefile生成構建是正常,運行container的時候會報錯:git
docker run --name app-1 --publish 80:80 -it app:latest standard_init_linux.go:195: exec user process caused "no such file or directory"
聽說是鏡像golang
和alpine
的操做系統雖然都是linux
,可是底層架構不同,因此在golang
鏡像生成的可執行文件無法在alpine
操做系統上運行(在哪裏看到的英文解釋,再看到的話補上連接)golang
alpine
鏡像來構建,而後把構建生成的可執行文件拷貝到純淨的alpine
鏡像中,這樣就不存在上面的問題了.
golang:1.9.4-alpine3.7
,發現執行到go get -v .
時保存,該鏡像內不包含git
工具...git
工具apk add --no-cache git
...