我正尝试使用我的golang项目构建docker映像
我使用以下
#build stage
FROM golang:alpine as builder
WORKDIR /go/src/app
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -ldflags '-extldflags "-static"' -o main .
RUN apk add --no-cache git
#final stage
FROM alpine:latest
RUN apk --no-cache add ca-certificates
COPY --from=builder /go/bin/app /app
ENTRYPOINT ./app
LABEL Name=fzr-dbc Version=0.0.1
EXPOSE 3000
此构建在我的main.go
文件中失败,该文件如下所示
package main
import (
"fzr-dbc/cmd/tsr”
)
func main() {
tsr.Execute()
}
当我运行命令时
docker build -t fzr .
错误是:
main.go:4:2: cannot find package "fzr-dbc/cmd/tsr” in any of:
/go/src/app/vendor/fzr-dbc/cmd/tsr (vendor tree)
/usr/local/go/src/fzr-dbc/cmd/tsr (from $GOROOT)
/go/src/fzr-dbc/cmd/tsrs (from $GOPATH)
由于找不到我的项目路径而导致的错误,这里可能遗漏了什么?
docker文件位于我的根项目fzr
中,我从那里运行docker build
答案 0 :(得分:0)
您正在Dockerfile中运行go build
:
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -ldflags '-extldflags "-static"' -o main .
这要求您安装所有依赖项以进行构建。
要解决此问题,请:
COPY
二进制文件直接放入docker;或者,RUN
进程的一部分,在docker内部安装依赖项:
GOPATH
中的适当目录中。然后,在该文件夹上,运行go get -u ./...
go.mod
和go.sum
的Go 1.11。然后,您可以使用命令go mod download
将所有依赖项下载到Docker映像内的Go软件包缓存中。