查找golang dockerfile的路径时出错

时间:2018-08-30 14:45:19

标签: docker go dockerfile

我正尝试使用我的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

1 个答案:

答案 0 :(得分:0)

您正在Dockerfile中运行go build

RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -ldflags '-extldflags "-static"' -o main .

这要求您安装所有依赖项以进行构建。

要解决此问题,请:

  1. 在您的主机上构建二进制文件,然后将COPY二进制文件直接放入docker;或者,
  2. 作为RUN进程的一部分,在docker内部安装依赖项:
    • 对于1.11之前的Go,您需要将项目源代码移动到GOPATH中的适当目录中。然后,在该文件夹上,运行go get -u ./...
    • 对于Go 1.11+,您需要使用正确定义go.modgo.sum的Go 1.11。然后,您可以使用命令go mod download将所有依赖项下载到Docker映像内的Go软件包缓存中。