我有一個簡單的應用程序,用于github.com/go-sql-driver/mysql連接到 MySQL 數據庫并執行簡單的查詢。這一切在我的本地機器上運行良好,但是當我嘗試使用 docker build 構建它時,我得到以下輸出:[+] Building 4.1s (9/10) => [internal] load build definition from Dockerfile 0.0s => => transferring dockerfile: 104B 0.0s => [internal] load .dockerignore 0.0s => => transferring context: 2B 0.0s => [internal] load metadata for docker.io/library/golang:onbuild 1.3s => [auth] library/golang:pull token for registry-1.docker.io 0.0s => [internal] load build context 0.0s => => transferring context: 5.63kB 0.0s => CACHED [1/2] FROM docker.io/library/golang:onbuild@sha256:c0ec19d49014d604e4f62266afd490016b11ceec103f0b7ef44 0.0s => [2/2] COPY . /go/src/app 0.1s => [3/2] RUN go-wrapper download 2.0s => ERROR [4/2] RUN go-wrapper install 0.6s------我的 go 版本是最新的,我正在使用以下 dockerfile:FROM golang:onbuild據我所知,這應該go get是它需要的所有包。我也試過這樣:FROM golang:onbuildRUN go get "github.com/go-sql-driver/mysql"這具有相同的輸出。請注意,在我的代碼中,我像這樣導入包:import _ "github.com/go-sql-driver/mysql"我還使用了 github 上的其他包,這些似乎工作正常。
1 回答

侃侃爾雅
TA貢獻1801條經驗 獲得超16個贊
Docker 社區通常一直在避開 DockerfileONBUILD指令,因為它使派生圖像中實際發生的事情變得非?;靵y(請參閱圍繞“這真的是整個 Dockerfile 嗎?”的各種評論)。如果你在Docker Hub 上搜索golang:onbuild鏡像,你會發現這是 Go 1.7 或 1.8;Go 模塊是在 Go 1.11 中引入的。
您需要更新到更新的基礎映像,這意味著手動編寫 Dockerfile 步驟。對于典型的 Go 應用程序,這看起來像
FROM golang:1.18 AS build
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY ./ ./
RUN go build -o myapp .
FROM ubuntu:20.04
COPY --from=build /app/myapp /usr/local/bin
CMD ["myapp"]
(在最后階段,您可能需要RUN apt-get update && apt-get install ...MySQL 客戶端庫或其他工具。)
- 1 回答
- 0 關注
- 238 瀏覽
添加回答
舉報
0/150
提交
取消