我正在使用 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
Dockerfile
# 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实际上有更多的说明,但是我仅在控制台显示错误时将其放在此处。
Makefile
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
)
答案 0 :(得分:3)
什么是帽子?
当您尝试构建应用程序时,未在docker映像中安装所需的dep
为什么它会在docker映像中而不是在我的本地开发环境中出现?
在您的本地开发环境中,您将安装/获取所需的deps运行命令,如以下示例所示。
$ go get -u github.com/go-swagger/go-swagger/cmd/swagger
但是每个容器/图像将是一个空白/干净的环境。您需要告知首先安装deps所需的docker容器。
解决方案
使用Makefiles为您的项目创建任务/命令。进一步了解here
创建一个make文件命令以安装deps并构建项目
Makefile示例
.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管理器来执行此操作。下面的例子。
Makefile
.PHONY: setup
setup: @echo Installing dependencies:
dep ensure
详细了解here