Dockerfile с Go не может найти путь

У меня проблема с запуском моей локальной сборки, а также с настройкой моего 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

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

Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
0
0
869
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

По умолчанию 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, вы можете попробовать гомомодули

Также обратите внимание, что при такой структуре каталогов имя вашего пакета Go должно начинаться с "github.com/project/...".

David Maze 20.05.2019 17:41

Имя пакета @DavidMaze при импорте, которое вы имеете в виду

Bohdan Kostko 23.05.2019 14:57

Другие вопросы по теме