Docker 在 go.mod 文件中找不到依赖项

我在一个使用GoLang和Docker 的项目中工作,并使用 go.mod 来维护依赖关系。当我在没有 docker 的情况下构建时,该项目工作正常,但是当我尝试构建 docker 图像时,出现此错误:


internal/server/server.go:8:2: cannot find package "github.com/gorilla/mux" in any of:

        /usr/local/go/src/github.com/gorilla/mux (from $GOROOT)

        /go/src/github.com/gorilla/mux (from $GOPATH)

cmd/root.go:7:2: cannot find package "github.com/spf13/cobra" in any of:

        /usr/local/go/src/github.com/spf13/cobra (from $GOROOT)

        /go/src/github.com/spf13/cobra (from $GOPATH)

make: *** [Makefile:30: build] Error 1

文件


# Build Stage

FROM lacion/alpine-golang-buildimage:1.9.7 AS build-stage


LABEL app="build-status-hub"

LABEL REPO="https://github.com/MSLacerda/status-hub"


ENV PROJPATH=/go/src/github.com/MSLacerda/status-hub


# Because of https://github.com/docker/docker/issues/14914

ENV PATH=$PATH:$GOROOT/bin:$GOPATH/bin


ADD . /go/src/github.com/MSLacerda/status-hub

WORKDIR /go/src/github.com/MSLacerda/status-hub


RUN make build

Dockerfile其实有更多的指令,但我只把控制台显示错误的部分放在这里。


生成文件


build:

    @echo "building ${BIN_NAME} ${VERSION}"

    @echo "GOPATH=${GOPATH}"

    go build -ldflags "-X github.com/MSLacerda/status-hub/version.GitCommit=${GIT_COMMIT}${GIT_DIRTY} -X github.com/MSLacerda/status-hub/version.BuildDate=${BUILD_DATE}" -o bin/${BIN_NAME}

go.mod


module github.com/MSLacerda/status-hub


require (

    github.com/Sirupsen/logrus v1.0.6

    github.com/gorilla/mux v1.7.0

    github.com/spf13/cobra v0.0.3

    github.com/spf13/viper v1.2.0

    golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2 // indirect

)


qq_遁去的一_1
浏览 236回答 1
1回答

萧十郎

什么是快乐?当您尝试构建应用程序时,docker 映像中未安装所需的 deps为什么它出现在 docker 镜像中而不是在我的本地开发环境中?在您的本地开发环境中,您安装/获取所需的 deps 运行命令,如下例所示。$ go get -u github.com/go-swagger/go-swagger/cmd/swagger但是每个容器/图像都将是一个空的/干净的环境。您需要告知首先安装 deps 所需的 docker 容器。解决方案使用 Makefile 为您的项目创建任务/命令。创建一个 make file 命令来安装 deps 并构建项目生成文件示例.PHONY: setup setup: @echo Installing dependencies:     go get -u github.com/go-swagger/go-swagger/cmd/swagger .PHONY: build build: setup     go build -o $(BINARY) $(APP_FILE)make build然后需要调用该命令来创建您的图像,而不是当前使用的 go build。不要使用go get每个依赖项的命令,而是使用 go dep 管理器来执行它。按照这个例子。生成文件.PHONY: setup setup: @echo Installing dependencies:     dep ensure
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go