【发布时间】:2018-04-12 07:56:02
【问题描述】:
在我的 Golang/gin 项目中,我有一个 dockerfile。这个 docker 文件是这样的
FROM golang:latest
RUN mkdir -p /go/src/myAppName
ADD . /go/src/myAppName
WORKDIR /go/src/myAppName
ENV GOPATH /go
ENV PATH $GOPATH/bin:/usr/local/go/bin:$PATH
RUN go get -d -v ./...
RUN go install -v ./...
RUN go get github.com/pilu/fresh
EXPOSE 8080
CMD ["fresh"]
当我在 Dockerfile 所在项目的根目录中运行命令 docker build . --tag=myAppName:dev 时,它运行良好,直到它想使用 go get -d -v ./... 命令安装软件包。
我的项目本身有很多不同的包,所以当它尝试导入这些包时,它会告诉我以下信息:
package myAppName/app: unrecognised import path "myAppName/app" (import path does not begin with hostname).
我已阅读this 问题并及时在我的 Dockerfile 中设置了$GOPATH。
我还阅读了this 的问题,并尝试以手动方式构建项目,而无需使用全新的方式以及他们根本不设置 GOPATH 而是通过WORKDIR 命令进行设置的方法。
最后我尝试使用go-wrapper 命令,但是当我尝试使用它们时这些命令似乎不可用,导致错误command not found: go-wrapper
不幸的是,这些都不起作用,这是我的问题。
非常感谢任何正确方向的帮助或指示。
【问题讨论】:
-
问问自己:“
go get ./...是做什么的?然后问你为什么想要这个?然后删除它。go get不是关于“安装包” ,它是关于通过git clone从例如github下载外部包。 -
我确实对此提出了质疑,但由于我在项目中嵌套了 github 包的导入,因此我需要运行整个项目以检查导入
-
那么
go get ./...仍然是错误的。如果你在磁盘上的包导入了外部依赖项,那么你应该只下载(去获取)这些依赖项。但是在 docker build 期间这样做是个坏主意。供应商(提交到您的项目 SCR)或使用依赖工具,如 dep(或 vgo,如果感觉书呆子)。但不要尝试去获取:绝对没有办法去完成你需要的。 -
我会研究如何出售它们,因为这似乎是一个不错的选择,谢谢。