gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 01:37:41 24 4
gpt4 key购买 nike

我在一个使用 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

docker 文件

# 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

The Dockerfile actually has more instructions, but i placed here just only the part when the console shows the error.

生成文件

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
)

最佳答案

什么是快乐?

当您尝试构建应用程序时,所需的 deps 未安装在 docker 镜像中

为什么它出现在 docker 镜像中而不是在我的本地开发环境中?

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

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

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

解决方案

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

  • 创建一个 make 文件命令来安装 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

查看更多信息 here

关于Docker 在 go.mod 文件中找不到依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54813256/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com