go install in Dockerfile "could not read Username for 'https://github.com'"
Пытаюсь сделать Docker image (container) из папки на моем компьютере с ОС Linux-mint (к git не обращаюсь) и получаю устойчивую ошибку
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 шт):
Всё понятно.
Смотрите.
Команда на построение образа должна быть sudo docker build -t myimagename .
Здесь myimagename - это имя образа в той системе, где docker build его построит. Хотите - замените его в команде, котрую будете набирать, на что то более осмысленное. Потом команда docker images Вам его покажет в списке имиджей.
А ошибка с именем пользователя может возникнуть только по той причине, которую Вам указали в комментариях: нет такого репозитория на гитхабе. Вполне возможно, он когда то был, но его удалили. Или переименовали.
Поэтому Вам надо научиться строить Ваш образ без обращения к гитахбу. Ну, или обращаться к существующему репозиторию.
Кстати, на скриншоте видно, какая именно команда в Dockerfile вызывает ошибку.
доступ к приватным репозиториям лучше организовать через 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
Спасибо всем! Магия оказалась в /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!
