Dockerfile с Go не может найти путь - PullRequest
0 голосов
/ 20 мая 2019

У меня проблема с запуском локальной сборки, а также с настройкой Dockerfile.

Структура моего проекта выглядит так:

project
- cmd
  main.go
- internal
  - app
    app.go
Dockerfile

Итак, в main.go я говорю

import (
    "project/internal/app"
)

Затем, когда я говорю go build, я могу отлично бегать локально.

Тем не менее, в моем Dockerfile я говорю

FROM golang
ENV GOPATH /go/src/github.com/project
COPY . /go/src/github.com/project
WORKDIR /go/src/github.com/project
RUN make linux

И я получаю вопрос:

cmd/main.go:4:2: cannot find package "Slaxtract/internal/app" in any of:
    /usr/local/go/src/project/internal/app (from $GOROOT)
    /go/src/github.com/project/src/project/internal/app (from $GOPATH)

Почему Docker добавляет src к GOPATH? И как я могу настроить его так, чтобы он выглядел в нужном месте?

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

main.go:4:2: local import "../internal/app" in non-local package

Любая помощь будет очень признательна.

1 Ответ

1 голос
/ 20 мая 2019

По умолчанию Go ожидает найти папки, такие как src, pkg и bin в пределах GOPATH. Тем не менее, вы на самом деле указываете на папку вашего проекта. Чтобы это исправить, вам просто нужно указать GOPATH на /go.

Так что ваш Dockerfile должен выглядеть как

FROM golang
ENV GOPATH /go
COPY . /go/src/github.com/project
WORKDIR /go/src/github.com/project
RUN make linux

Более подробную информацию о GOPATH можно найти здесь . Если вы устали от GOPATH, вы можете попробовать gomodules

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