Как установить частные зависимости в Docker - PullRequest
0 голосов
/ 16 ноября 2018

Я пытаюсь загрузить приложение Go в Docker-контейнер.Это мой первый большой проект Go and Docker.Программа go работает очень хорошо, пока я запускаю ее на своем локальном компьютере, теперь я хочу запустить ее на EC2 в контейнере Docker.Мой файл Docker выглядит так:

FROM golang:latest 
RUN mkdir /tir
ADD . /tir 
WORKDIR /tir
RUN go build -o main . 
CMD ["/app/main"]

Но я получаю следующую ошибку для каждой частной зависимости:

main.go:17:2: cannot find package "github.com/ser/model" in any of:
    /usr/local/go/src/github.com/ser/model (from $GOROOT)
    /go/src/github.com/ser/model (from $GOPATH)

Когда я вставляю RUN go get ./.. перед RUN go build -o main ., я получаюследующая ошибка для каждого пакета:

fatal: could not read Username for 'https://github.com': terminal prompts disabled

пакет github.com/ser/endpoints: состояние выхода 128

Я пробовал пару решений, но ни одно не помогло.Я всегда в конечном итоге с вышеуказанными ошибками.Поскольку это мой первый проект docker + golang, есть ли готовые файлы dockerfiles для приложения golang с общими и частными зависимостями?

ОБНОВЛЕНИЕ: Я удалил go и скопировал каждый файл по одному ииспользуется dep -ensure после каждого файла.Теперь это работает, спасибо: D

1 Ответ

0 голосов
/ 16 ноября 2018

Ваши зависимости, вероятно, хранятся в GOPATH/src/<import-path>, и вы управляете ими с помощью инструмента go get.

Рассмотрите поставщика и такие инструменты, как dep или modules

В результате ваши зависимости будут включены в систему контроля версий, и проект станет намного более переносимым.

Вы также можете улучшить способ создания Docker изображения.

В текущей реализации используется один контейнер, включающий целый набор инструментов GO.Код копируется внутри того контейнера, который компилирует и размещает код.Для производства необходимо только позднее.

Лучшим вариантом будет использование 2 контейнеров:

  1. Go Инструменты для компиляции
  2. Легкий контейнер, содержащий только двоичные файлы
# Debian image with the latest version of Go installed
# and a workspace (GOPATH) configured at /go.
FROM golang:1.11 as builder
WORKDIR /go/src/github.com/space/project/

# Copy the local package files to the container's workspace.
ADD . /go/src/github.com/space/project/

# Build the service inside the container.
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .

FROM centurylink/ca-certs
EXPOSE 8080

# Copy app
COPY --from=builder /go/src/github.com/space/project/app   /
ENTRYPOINT ["/app"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...