猿问

使用 mysql 驱动程序时尝试在 docker 中构建我的 golang 应用程序时出错

我有一个简单的应用程序,用于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:onbuild

RUN go get "github.com/go-sql-driver/mysql"

这具有相同的输出。请注意,在我的代码中,我像这样导入包:


import _ "github.com/go-sql-driver/mysql"

我还使用了 github 上的其他包,这些似乎工作正常。


阿波罗的战车
浏览 211回答 1
1回答

侃侃尔雅

Docker 社区通常一直在避开 DockerfileONBUILD指令,因为它使派生图像中实际发生的事情变得非常混乱(请参阅围绕“这真的是整个 Dockerfile 吗?”的各种评论)。如果你在Docker Hub 上搜索golang:onbuild镜像,你会发现这是 Go 1.7 或 1.8;Go 模块是在 Go 1.11 中引入的。您需要更新到更新的基础映像,这意味着手动编写 Dockerfile 步骤。对于典型的 Go 应用程序,这看起来像FROM golang:1.18 AS buildWORKDIR /appCOPY go.mod go.sum ./RUN go mod downloadCOPY ./ ./RUN go build -o myapp .FROM ubuntu:20.04COPY --from=build /app/myapp /usr/local/binCMD ["myapp"](在最后阶段,您可能需要RUN apt-get update && apt-get install ...MySQL 客户端库或其他工具。)
随时随地看视频慕课网APP

相关分类

Go
我要回答