У меня есть двоичный файл npm, который я хотел бы упаковать в контейнер Docker.У меня есть эта конфигурация:
# Docker image for the Mongo Stitch command
FROM golang:alpine
# Do a system update
RUN apk update
RUN apk add git
# Declare base dir
WORKDIR /root
# The console binary for Mongo Stitch
RUN git clone https://github.com/10gen/stitch-cli.git
WORKDIR /root/stitch-cli
RUN go build
CMD ["/bin/sh"]
Я получаю эту ошибку:
main.go:8:2: cannot find package "github.com/10gen/stitch-cli/commands" in any of:
/usr/local/go/src/github.com/10gen/stitch-cli/commands (from $GOROOT)
/go/src/github.com/10gen/stitch-cli/commands (from $GOPATH)
main.go:9:2: cannot find package "github.com/10gen/stitch-cli/utils" in any of:
/usr/local/go/src/github.com/10gen/stitch-cli/utils (from $GOROOT)
/go/src/github.com/10gen/stitch-cli/utils (from $GOPATH)
main.go:11:2: cannot find package "github.com/mitchellh/cli" in any of:
/usr/local/go/src/github.com/mitchellh/cli (from $GOROOT)
/go/src/github.com/mitchellh/cli (from $GOPATH)
Это неожиданно, поскольку я думаю, что официальный контейнер Go будет иметь все, что мне нужно.У меня установлены следующие переменные:
~ # set | grep GO
GOLANG_VERSION='1.11.5'
GOPATH='/go'
В инструкциях по сборке сказано, что go build
достаточно, чтобы это работало.Я играл с go get
, с различными сообщениями об ошибках, но я думаю, что это может быть дикая погоня, поскольку, если бы мне пришлось извлекать зависимости вручную, инструкции сказали бы так.
Для чего это стоит, если я выдаю go get
в оболочке контейнера, я получаю это:
~/stitch-cli # go get
go get: no install location for directory /root/stitch-cli outside GOPATH
For more details see: 'go help gopath'
Я попытался проанализировать материал в указанном файле справки, но я не уверен, какая часть относится к моему случаю.
Итак, я подумал, стоило ли отсутствует GOROOT
исправить .Я сделал это:
~/stitch-cli # which go
/usr/local/go/bin/go
~/stitch-cli # GOROOT=/usr/local/go
~/stitch-cli # export GOROOT
~/stitch-cli # go build
# _/root/stitch-cli
./main.go:25:3: cannot use commands.NewWhoamiCommandFactory(ui) (type "github.com/10gen/stitch-cli/vendor/github.com/mitchellh/cli".CommandFactory) as type "github.com/mitchellh/cli".CommandFactory in map value
./main.go:26:3: cannot use commands.NewLoginCommandFactory(ui) (type "github.com/10gen/stitch-cli/vendor/github.com/mitchellh/cli".CommandFactory) as type "github.com/mitchellh/cli".CommandFactory in map value
./main.go:27:3: cannot use commands.NewLogoutCommandFactory(ui) (type "github.com/10gen/stitch-cli/vendor/github.com/mitchellh/cli".CommandFactory) as type "github.com/mitchellh/cli".CommandFactory in map value
./main.go:28:3: cannot use commands.NewExportCommandFactory(ui) (type "github.com/10gen/stitch-cli/vendor/github.com/mitchellh/cli".CommandFactory) as type "github.com/mitchellh/cli".CommandFactory in map value
./main.go:29:3: cannot use commands.NewImportCommandFactory(ui) (type "github.com/10gen/stitch-cli/vendor/github.com/mitchellh/cli".CommandFactory) as type "github.com/mitchellh/cli".CommandFactory in map value
~/stitch-cli #
Хорошо, возможно, это немного дальше, но сейчас я твердо нахожусь на территории "пробовать случайные вещи".Есть ли что-то, что я могу сделать, чтобы оно работало «из коробки»?
Я также пробовал обычный Alpine (v3.9) с установленной Go вручную, и на нем даже не было установлено GOPATH
, но я получилпочти те же самые ошибки "не могу найти пакет".Что еще можно попробовать для компиляции?
Я также попытался перейти на полную версию изображения Golang, а не на более светлый образ Alpine, и у меня возникают те же проблемы, как с build
и get
.
Я также мог бы вернуться к установке через NPM, но у меня были проблемы с этим (и эта проблема, вероятно, вышла бы за рамки вопроса о Голанге).
Возможный дубликат
Мой вопрос был определен как возможный дубликат этого вопроса .Я думаю, что этот вопрос по сути является дубликатом вторичной проблемы, отмеченной здесь, которая, как я упоминал ранее, была, вероятно, красной сельдью.Если есть какие-то ошибки, описывающие ответ на первую ошибку, это, вероятно, будет лучшим указателем.