Почему «go build» не работает для моего проекта Docker? - PullRequest
0 голосов
/ 03 февраля 2019

У меня есть двоичный файл 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, но у меня были проблемы с этим (и эта проблема, вероятно, вышла бы за рамки вопроса о Голанге).

Возможный дубликат

Мой вопрос был определен как возможный дубликат этого вопроса .Я думаю, что этот вопрос по сути является дубликатом вторичной проблемы, отмеченной здесь, которая, как я упоминал ранее, была, вероятно, красной сельдью.Если есть какие-то ошибки, описывающие ответ на первую ошибку, это, вероятно, будет лучшим указателем.

1 Ответ

0 голосов
/ 03 февраля 2019

Флимзи любезно указал мне на другой ответ (который я бы никогда не нашел без знающей помощи).Поскольку я думаю, что процесс сборки нетривиален, особенно для не-сусликов, таких как я, я опубликую новый Dockerfile:

# Docker image for the Mongo Stitch command

FROM golang:alpine

# Do a system update
RUN apk update

RUN apk add git curl

# Declare base dir
WORKDIR /root/src

RUN git clone https://github.com/10gen/stitch-cli.git

WORKDIR /root/src/stitch-cli

# Remove the old dependencies
RUN rm -rf vendor

# Fetch the dependencies
RUN curl https://raw.githubusercontent.com/golang/dep/master/install.sh | sh
RUN GOPATH=$GOPATH:/root dep ensure

# Now it should build
RUN GOPATH=$GOPATH:/root go build

CMD ["/bin/sh"]

Извлечение зависимостей приводит к этой ошибке:

Warning: the following project(s) have [[constraint]] stanzas in Gopkg.toml:

  ✗  github.com/10gen/escaper
  ✗  github.com/dgrijalva/jwt-go
  ✗  github.com/ogier/pflag
  ✗  gopkg.in/mgo.v2

However, these projects are not direct dependencies of the current project:
they are not imported in any .go files, nor are they in the 'required' list in
Gopkg.toml. Dep only applies [[constraint]] rules to direct dependencies, so
these rules will have no effect.

Either import/require packages from these projects so that they become direct
dependencies, or convert each [[constraint]] to an [[override]] to enforce rules
on these projects, if they happen to be transitive dependencies.

Тем не менее, он все еще, кажется, компилируется.Меня беспокоит то, что мне пришлось сделать гораздо больше шагов, чем в документации, что заставляет меня думать, что я сделал это более сложным, чем нужно.

Docker repo

Я сделал постоянное репо Docker доступным здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...