Ошибка создания контейнера докеров из-за импорта локального пакета в файл main.go

Я пытаюсь создать контейнер Docker для своего проекта Go, но постоянно сталкиваюсь со следующей ошибкой:

=> ERROR [backend-builder 5/5] RUN --mount=type=cache,mode=0777,target=/go/pkg/mod \
--mount=type=cache,mode=0777,target=/.cache/go-build \
CGO_ENABLED=0 GOOS=linux go build -o serve ./backend/cmd/main.go: \
#17 0.343 backend/cmd/main.go:10:2: no required module provides package \
github.com/LarsDepuydt/peno-entrepreneurship-3d-oclusion/backend/cmd/serve; \
to add it: \
#17 0.343 go get github.com/LarsDepuydt/peno-entrepreneurship-3d-oclusion/backend/cmd/serve \
------
executor failed running [/bin/sh -c CGO_ENABLED=0 GOOS=linux go build -o serve ./backend/cmd/main.go]: exit code: 1

Я подозреваю, что ошибка вызвана тем, что мой файл main.go импортирует из моего проекта локальный пакет под названием serve.

Это моя структура проекта:

peno-entrepreneurship-3d-oclusion/
│
├── backend/
│   ├── cmd/
│   │   ├── main.go
│   │   └── serve/
│   │       └── serve.go
│   ├── go.mod
│   └── go.sum
│
├── Dockerfile
│
└── ... (other frontend files and directories)


Это мой оператор импорта в моем main.go:

import (
    "database/sql"
    "fmt"
    "log"
    "net/http"
    "os"

    "github.com/LarsDepuydt/peno-entrepreneurship-3d-oclusion/backend/cmd/serve"
)

Это мой файл докера:

################################
# Build backend
################################

FROM dev AS backend-builder

# Change the WORKDIR in the backend-builder stage
WORKDIR /usr/src/app

# pre-copy/cache go.mod for pre-downloading dependencies and only redownloading them in subsequent builds if they change
COPY ./backend/go.mod ./backend/go.sum ./
RUN --mount=type=cache,mode=0777,target=/go/pkg/mod go mod download
#RUN go get github.com/LarsDepuydt/peno-entrepreneurship-3d-oclusion/backend/cmd/serve

COPY . .

# Use native go packages (CGO_ENABLED)
RUN --mount=type=cache,mode=0777,target=/go/pkg/mod \
    --mount=type=cache,mode=0777,target=/.cache/go-build \
    CGO_ENABLED=0 GOOS=linux go build -o serve ./backend/cmd/main.go


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

В main.go пробовал так: "./serve" вместо текущего импорта.

Я также пробовал много вещей, касающихся WORKDIR и пути в файле докера. Но я продолжаю получать ту же ошибку и не могу исправить ошибку.

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

Ответы 1

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

На Dockerfile вы используете следующие скрипты:

WORKDIR /usr/src/app
COPY ./backend/go.mod ./backend/go.sum ./
RUN --mount=type=cache,mode=0777,target=/go/pkg/mod go mod download

При этом файл go.mod находится прямо под /usr/src/app, и этот же путь станет корневым путем вашего модуля go.

Исходя из структуры вашего кода, go.mod должен располагаться под /usr/src/app/backend, а НЕ в /usr/src/app.

Попробуйте изменить скрипт на этот ниже:

FROM dev AS backend-builder

WORKDIR /usr/src/app/backend
COPY ./backend/go.mod ./backend/go.sum ./
RUN --mount=type=cache,mode=0777,target=/go/pkg/mod go mod download

WORKDIR /usr/src/app
COPY . .

WORKDIR /usr/src/app/backend
RUN --mount=type=cache,mode=0777,target=/go/pkg/mod \
    --mount=type=cache,mode=0777,target=/.cache/go-build \
    CGO_ENABLED=0 GOOS=linux go build -o serve ./cmd/main.go

Я все еще получил ту же ошибку.. :( Ошибка такова: > [backend-builder 6/6] RUN #18 0.348 backend/cmd/main.go:10:2: не требуется модуль, предоставляющий пакет github.com/LarsDepuydt /peno-entrepreneurship-3d-oclusion/bac‌​kend/cmd/serve: файл go.mod не найден в текущем каталоге или каком-либо родительском каталоге; см. «go help modules» ------ Ошибка запуска исполнителя [/bin/ sh -c CGO_ENABLED=0 GOOS=linux go build -o serve ./backend/cmd/main.go]: код выхода: 1

Dag Malstaf 05.04.2023 14:50

@DagMalstaf Я только что обновил свой ответ. Я добавил еще один WORKDIR перед последней строкой, а также поправил скрипт RUN в последней строке

novalagung 05.04.2023 15:44

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