Docker - Golang 找不到包

标签 docker go

我有一个使用 Golang 的应用程序,我想“dockerize”它,基于 this tutorial
这是项目结构:
enter image description here
Dockerfile:

FROM golang:1.12.7-alpine3.9
RUN mkdir /app
ADD . /app
WORKDIR /app
RUN go build -o main .
CMD ["/app/main"]
当我尝试运行此命令时:
docker build -t pln-monitoring .
它显示了这个错误:
Step 5/6 : RUN go build -o main .
 ---> Running in 5e3c84f1435d
main.go:12:2: cannot find package "github.com/geshtng/pln-monitoring/middleware" in any of:
        /usr/local/go/src/github.com/geshtng/pln-monitoring/middleware (from $GOROOT)
        /go/src/github.com/geshtng/pln-monitoring/middleware (from $GOPATH)
main.go:13:2: cannot find package "github.com/geshtng/pln-monitoring/pkg/common/config" in any of:
        /usr/local/go/src/github.com/geshtng/pln-monitoring/pkg/common/config (from $GOROOT)
        /go/src/github.com/geshtng/pln-monitoring/pkg/common/config (from $GOPATH)

最佳答案

失败的原因是golang程序使用的依赖在docker内部不可用,无法成功构建。
您正在使用 dep 进行依赖管理,即本地外部库,但尚未在 docker 中安装它们中的任何一个。
您需要通过在容器中使用第一个 dep 工具来使它们在 docker 中可用。 dep 工具将确保 dep ensure 可以使用包所需的依赖项
此外,理想情况下,您应该将存储库放在 $GOPATH 中,如下所述
dockerfile 将需要这些命令:

FROM golang:1.12 
RUN mkdir /go/src/app
RUN go get -u github.com/golang/dep/cmd/dep

ADD ./main.go /go/src/app
COPY ./Gopkg.toml /go/src/app

WORKDIR /go/src/app 

RUN dep ensure 
RUN go build
CMD ["./app"]
阅读 Go Modules 和与 dep 的区别可能对您也很有用。 here

关于Docker - Golang 找不到包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62669249/

相关文章:

mysql - 无法将 Docker Wordpress 容器连接到主机上的 MySQL

go - 从 Twitter 库搜索中获取数据到 Go 中的结构

http - 关于http劫持和保活

unit-testing - Google App Engine 数据存储 - 测试查询失败

json - 将 interface{} 转换为 map

python - 无法从docker容器内的python连接redis

docker - 如何订购 docker 容器启动?

linux - ssh_exchange_identification : read: Connection reset by peer; ubuntu in Docker

go - 如何在父方法中调用子方法?

python - 在 Pycharm 上通过 docker-compose 运行 Python 控制台