docker - Docker - Golang 找不到包
问题描述
我有一个使用 Golang 的应用程序,我想“dockerize”它,基于本教程
这是项目结构:
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 模块和差异的信息可能对您也很有用dep
推荐阅读
- javascript - 如何使用 webpack 动态导入
- angular - 更改拦截器 angular2 中的请求正文
- symfony - 解析错误:语法错误,意外的“?”,期望变量(T_VARIABLE)
- java - Java 可选:如何处理长 map() 链
- javascript - PrimeNg TabView 与 ConfirmDialog
- mysql - 使用递归 MySQL 查询从父行到子行获取值
- angular - 十进制管道,未四舍五入的值
- git - 使用 SSH 的 Git 克隆在 Windows 上不起作用 - 收到断开连接,无法从远程存储库读取
- c++ - 可调用的完美转发
- php - Zend Framework3 类似路由冲突