在我的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
不幸的是,这些都不起作用,因此我的问题。
非常感谢任何正确方向的帮助或指示。
答案 0 :(得分:0)
经过实验,我找到了解决方案:
所有依赖项都以dep
出售。它是一个非常简单且非常有用的工具 - 我建议开始使用它。
所有套餐(以及我自己的项目)都以其全名 - $GOPATH/src/github.com/username/project/package/etc
然后你可以像这样使用简单的Dockerfile
:
FROM golang:latest AS builder
RUN go version
COPY . "/go/src/github.com/user/project"
WORKDIR "/go/src/github.com/user/project"
RUN set -x && \
apt-get update && \
go get github.com/golang/dep/cmd/dep && \
which dep && \
date
#RUN go get -v -t . # <- alternative way if you really don't want to use vendoring
RUN set -x && \
dep ensure -v && \
echo "vendor:" && \
dep status
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o /run-file
CMD ["/run-file"]
EXPOSE 8000