我有一个包装结构
$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:没有此类主机)
答案 0 :(得分:2)
您的$GOPATH
的内容在cli和Dockerimage之间有所不同,因为您的软件包不在正确的位置。
您需要RUN mkdir -p $GOPATH/src/io.sure
和COPY ./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"]