go install in Dockerfile "could not read Username for 'https://github.com'"

Пытаюсь сделать Docker image (container) из папки на моем компьютере с ОС Linux-mint (к git не обращаюсь) и получаю устойчивую ошибку

enter image description here

exit status 128: fatal: could not read Username for 'https://github.com': terminal prompts disabled Confirm the import path was entered correctly. If this is a private repository, see https://golang.org/doc/faq#git_https for additional information.

причем ссылка в тексте ошибки ссылается на документацию к go get

Dockerfile:

FROM golang:1.17.1

ADD . /home/mintuser/go/src/github.com/EwRvp7LV7/grpctest/server

RUN go install -v github.com/EwRvp7LV7/grpctest/server@latest

ENTRYPOINT ["/go/bin/server"]

EXPOSE 5300

SSH правка конфига git не дает изменений. Благодарен, если подскажете куда копать!

git config --global url.ssh://[email protected]/.insteadOf https://github.com/

Ответы (3 шт):

Автор решения: S.H.

Всё понятно.

Смотрите.

Команда на построение образа должна быть sudo docker build -t myimagename .

Здесь myimagename - это имя образа в той системе, где docker build его построит. Хотите - замените его в команде, котрую будете набирать, на что то более осмысленное. Потом команда docker images Вам его покажет в списке имиджей.

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

Поэтому Вам надо научиться строить Ваш образ без обращения к гитахбу. Ну, или обращаться к существующему репозиторию.

Кстати, на скриншоте видно, какая именно команда в Dockerfile вызывает ошибку.

→ Ссылка
Автор решения: Senior Pomidor

доступ к приватным репозиториям лучше организовать через GitHub Personal Token. Зайдите в настройки пользователя, создайте новый персональный токен PAT, переедайте его во время сборки

docker build --build-arg GITHUB_TOKEN=<you token here> -t my_image_name .

FROM golang:1.17.1

# use GITHUB_TOKEN token for fetch private modules
ARG GITHUB_TOKEN

RUN git config \
  --global \
  url."https://${GITHUB_TOKEN}@github.com".insteadOf \
  "https://github.com"
ADD . /home/mintuser/go/src/github.com/EwRvp7LV7/grpctest/server

RUN go install -v github.com/EwRvp7LV7/grpctest/server@latest

ENTRYPOINT ["/go/bin/server"]

EXPOSE 5300

но проблема совсем в другом.

Исходя из строки ADD . /home/mintuser/go/src/github.com/EwRvp7LV7/grpctest/server я могу сделать вывод. что вы уже написали код, и этот код хотите копировать уже внутрь контейнера для сборки. тогда вам нужно сбилдить ваш код после копирования следующим образом

FROM golang:1.17.1

# use GITHUB_TOKEN token for fetch private modules
ARG GITHUB_TOKEN

RUN git config \
  --global \
  url."https://${GITHUB_TOKEN}@github.com".insteadOf \
  "https://github.com"

COPY ./ ./

RUN go mod download

RUN go build -o /app main.go

ENTRYPOINT ["/app"]

EXPOSE 5300

→ Ссылка
Автор решения: John Nix

Спасибо всем! Магия оказалась в /go/src/, WORKDIR и go.mod.

Что нужно запустить:

github.com/EwRvp7LV7/grpctest/server/main.go

Создаем go.mod с зависимостями в ./grpctest:

$ export GO111MODULE="auto" && go mod init && go mod tidy

Там же Dockerfile

FROM golang:1.17

#ADD не рекомендуют
#копируем все файлы из текущей папки в /go
COPY . /go/src/github.com/EwRvp7LV7/grpctest

#из этой папки запускаются executable, хотя не обязательно в ней находятся
WORKDIR /go/src/github.com/EwRvp7LV7/grpctest

#full path! Оба варианта рабочие
#The -v flag prints the names of packages and files as they are processed. 
#RUN go install -v /go/src/github.com/EwRvp7LV7/grpctest/server/main.go
RUN go install -v /go/src/github.com/EwRvp7LV7/grpctest/server

#go build помещает результат в любую папку, go install в $GOBIN, в остальном разницы не заметил.
ENTRYPOINT ["/go/bin/main"]

EXPOSE 5300

Dockerfile v2. Длинный path не обязателен:

FROM golang:1.17

COPY . /go/src
WORKDIR /go/src/app

RUN go install -v /go/src/server

ENTRYPOINT ["/go/bin/main"]

EXPOSE 5300

Запускаем:

sudo docker build .

В последней строке забираем ID image:

Successfully built f4435bb4730e

Bingo!

→ Ссылка