包X无法识别的导入路径:导入路径不以主机名

时间:2018-04-12 07:56:03

标签: docker go

在我的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

不幸的是,这些都不起作用,因此我的问题。

非常感谢任何正确方向的帮助或指示。

1 个答案:

答案 0 :(得分:0)

经过实验,我找到了解决方案:

  1. 所有依赖项都以dep出售。它是一个非常简单且非常有用的工具 - 我建议开始使用它。

  2. 所有套餐(以及我自己的项目)都以其全名 - $GOPATH/src/github.com/username/project/package/etc

  3. 找到
  4. 然后你可以像这样使用简单的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