繁体   English   中英

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

[英]Docker can't find dependencies in go.mod file

我正在使用GoLangDocker开发一个项目,并使用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实际上有更多说明,但是当控制台显示错误时,我仅在此处放置了一部分。

生成文件

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
)

什么在打??

当您尝试构建应用程序时,未在Docker映像中安装所需的dep

为什么它出现在docker映像中而不出现在我的本地dev env中?

在本地开发环境中,您将安装/获取所需的deps运行命令,例如以下示例。

$ go get -u github.com/go-swagger/go-swagger/cmd/swagger

但是每个容器/图像将是一个空/干净的环境。 您需要告知首先安装deps所需的docker容器。

  • 使用Makefiles为您的项目创建任务/命令。 这里查看更多

  • 创建一个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管理器来执行此操作。 下面的例子。

Makefile文件

.PHONY: setup
setup: @echo Installing dependencies:
    dep ensure

在这里查看更多信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM