Как импортировать пакет, если код не размещен в интернете - PullRequest
1 голос
/ 27 марта 2019

У меня есть структура пакета

$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"] 

Код компилируется и запускается из командной строки.Но когда я создаю образ докера, go get пытается загрузить io.sure / api / proto / v1, даже когда я скопировал папку api в образ докера.Как я могу остановить / пропустить загрузку пакета, так как у меня нет кода на github или любом другом публичном репо.

Делает ли это правильно, поскольку это мой собственный пакет, который нельзя экспортировать или экспортировать во внешний мир.

Я пытался использовать модули go, но у меня возникли проблемы, и я все еще хочу работатьс GOPATH.


повторил обе комбинации, но ошибка все та же.код копируется в образ gopath.

С Голана: 1.12.1-alpine AS builder RUN apk update && apk add --no-cache git WORKDIR $ GOPATH / src / io.sure COPY ./party/,КОПИЯ ./api/.RUN go get -d -v RUN CGO_ENABLED = 0 перейти к установке

С нуля WORKDIR / opt COPY --from = builder / go / bin / app.ENTRYPOINT ["/ opt / app"]

ОТ golang: 1.12.1-alpine AS build RUN apk update && apk add --no-cache git WORKDIR $ GOPATH / src RUN mkdir -p $ GOPATH / src/io.sure COPY ./party/.КОПИЯ ./api/.RUN go get -d -v RUN CGO_ENABLED = 0 перейти к установке

С нуля WORKDIR / opt COPY --from = builder / go / bin / app.ENTRYPOINT ["/ opt / app"] Извлечение https://io.sure/api/proto/v1/party?go-get=1 Не удалось получить https: Get https://io.sure/api/proto/v1/party?go-get=1: dial tcp: lookup io.sure на xxx.xx.0.2: 53: нет такого хост-пакета io.sure/ api / proto / v1 / party: неизвестный путь импорта «io.sure / api / proto / v1 / party» (https fetch: Get https://io.sure/api/proto/v1/party?go-get=1: dial tcp: lookup io.sure на xxx.31.0.2:53: такого хоста нет)

Ответы [ 2 ]

2 голосов
/ 27 марта 2019

Содержимое вашего $GOPATH отличается между cli и Dockerimage тем, что ваши пакеты находятся не в нужном месте.

Вам нужно RUN mkdir -p $GOPATH/src/io.sure и COPY ./party $GOPATH/src/io.sure/, чтобы достичь того же макета в Dockerimageкак в кли.

Возможно, вам нужно адаптировать пути, но я надеюсь, что вы поняли идею

0 голосов
/ 30 апреля 2019

нашел решение. модифицированный Dockerfile. Все зависимости управляются с помощью Godep

изменен рабочий каталог на /go/src/github.com/kubesure/party

добавлено эхо RUN "[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"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...