我有一个简单的应用程序,用于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指令,因为它使派生图像中实际发生的事情变得非常混乱(请参阅围绕“这真的是整个 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 关注
- 210 浏览
添加回答
举报
0/150
提交
取消