如果代码未托管在互联网上,如何导入软件包

时间:2019-03-27 13:40:05

标签: go import dockerfile

我有一个包装结构

$GOPATH/src/io.sure/api/proto/vi/party.pb.go
        .../io.sure/party/party.go
        ../io.sure/Dockerfile

party.go的导入是

import (  
    "context"
    "google.golang.org/grpc"
    "io.sure/api/proto/v1"
    "log"
    "net"
)

FROM golang:1.12.1-alpine AS builder   
RUN apk update && apk add --no-cache git   
WORKDIR /go/src/app  
COPY ./party/ .  
COPY ./api/ .  
RUN go get -d -v  
RUN CGO_ENABLED=0 go install

FROM scratch  
WORKDIR /opt  
COPY --from=builder /go/bin/app .  
ENTRYPOINT ["/opt/app"] 

该代码编译并从命令行运行。但是当我构建一个docker映像时,即使我在docker映像中复制了api文件夹,也可以尝试下载io.sure / api / proto / v1。我如何停止/跳过下载程序包,因为我在github或任何其他公共仓库上没有代码。

供应商应该做正确的事,因为它是我自己的包装,可能不会出口或出口到外界。

我尝试了go模块,但我遇到了问题,但仍想使用GOPATH。


将两个组合都变了,但仍然是相同的错误。代码确实会复制到图像gopath中。

FROM golang:1.12.1-alpine AS构建器 运行apk更新&& apk添加--no-cache git WORKDIR $ GOPATH / src / io.sure COPY ./party/。 COPY ./api/。 运行go get -d -v RUN CGO_ENABLED = 0进行安装

从零开始 WORKDIR / opt 复制--from = builder / go / bin / app。 ENTRYPOINT [“ / opt / app”]

FROM golang:1.12.1-alpine AS构建器 运行apk更新&& apk添加--no-cache git WORKDIR $ GOPATH / src 运行mkdir -p $ GOPATH / src / io.sure COPY ./party/。 COPY ./api/。 运行go get -d -v RUN CGO_ENABLED = 0进行安装

从零开始 WORKDIR / opt 复制--from = builder / go / bin / app。 ENTRYPOINT [“ / opt / app”] 提取https://io.sure/api/proto/v1/party?go-get=1 https失败:获取https://io.sure/api/proto/v1/party?go-get=1:拨打tcp:在xxx.xx.0.2:53上查找io.sure:没有这样的主机包io.sure / api / proto / v1 / party:无法识别导入路径“ io.sure / api / proto / v1 / party”(https提取:获取https://io.sure/api/proto/v1/party?go-get=1:拨打tcp:在xxx.31.0.2:53上查找io.sure:没有此类主机)

2 个答案:

答案 0 :(得分:2)

您的$GOPATH的内容在cli和Dockerimage之间有所不同,因为您的软件包不在正确的位置。

您需要RUN mkdir -p $GOPATH/src/io.sureCOPY ./party $GOPATH/src/io.sure/才能在Dockerimage中实现与cli相同的布局。

您可能需要调整路径,但我希望您有所想法

答案 1 :(得分:0)

找到了解决方案。修改后的Dockerfile所有依赖项都通过Godep进行管理

将工作目录更改为/go/src/github.com/kubesure/party

添加了RUN echo“ [url \” git@github.com:\“] \ n \ tinsteadOf = https://github.com/” >>


RUN echo "[url \"git@github.com:\"]\n\tinsteadOf = https://github.com/" >> /root/.gitconfig
RUN apk update && apk add --no-cache git
WORKDIR /go/src/github.com/kubesure/party
COPY . .
RUN CGO_ENABLED=0 go install

FROM scratch
WORKDIR /opt
COPY --from=builder /go/bin/party .
EXPOSE 50051
CMD ["/opt/party"]