gpt4 book ai didi

go - 如果代码未托管在 Internet 上,如何导入包

转载 作者:IT王子 更新时间:2023-10-29 02:00:51 25 4
gpt4 key购买 nike

我有一个包结构

$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 镜像时,go get 尝试下载 io.sure/api/proto/v1,即使我在 docker 镜像中复制了 api 文件夹。我怎样才能停止/跳过下载包,因为我在 github 或任何其他公共(public) repo 上没有代码。

vendoring 是一件正确的事情,因为它是我自己的包,可能无法导出或导出到外界。

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


尝试了两种组合,但仍然出现相同的错误。代码确实被复制到图像 gopath 中。

FROM golang:1.12.1-alpine AS builder运行 apk 更新 && apk 添加 --no-cache gitWORKDIR $GOPATH/src/io.sure复制 ./party/.复制 ./api/。跑去得到-d -vRUN CGO_ENABLED=0 去安装

从零开始工作目录/opt复制 --from=builder/go/bin/app 。入口点 ["/opt/app"]

FROM golang:1.12.1-alpine AS builder运行 apk 更新 && apk 添加 --no-cache git工作目录 $GOPATH/src运行 mkdir -p $GOPATH/src/io.sure复制 ./party/.复制 ./api/。跑去得到-d -vRUN CGO_ENABLED=0 去安装

从零开始工作目录/opt复制 --from=builder/go/bin/app 。入口点 ["/opt/app"]正在获取 https://io.sure/api/proto/v1/party?go-get=1 https 获取失败:获取 https://io.sure/api/proto/v1/party?go-get=1 : dial tcp: lookup io.sure on xxx.xx.0.2:53: no such host package io.sure/api/proto/v1/party: unrecognized import path "io.sure/api/proto/v1/party"( https fetch: Get https://io.sure/api/proto/v1/party?go-get=1 : dial tcp: lookup io.sure on xxx.31.0.2:53: no such host)

最佳答案

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

您需要RUN mkdir -p $GOPATH/src/io.sureCOPY ./party $GOPATH/src/io.sure/ 来实现同样的效果像在 cli 上一样在 Dockerimage 中布局。

您可能需要调整路径,但我希望您能理解

关于go - 如果代码未托管在 Internet 上,如何导入包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55378657/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com