Сбой COPY: запрещенный путь вне контекста сборки - PullRequest
0 голосов
/ 13 апреля 2020

У меня есть монорепо, которое содержит различные Go службы и библиотеки. Он имеет структуру

monorepo
 services 
  service-a 
   - Dockerfile
go.mod
go.sum

My go .mod находится в root monorepo, и службы используют зависимости, указанные в файле go .mod.

Я создаю Docker образ с

docker build -t some: tag ./services/service-a/

Когда я пытаюсь собрать мой Docker изображение из root monorepo с вышеприведенной командой docker Я получаю следующую ошибку.

Не удалось скопировать: запрещенный путь вне контекста сборки: ../../ go .mod ()

Ниже приведен мой Dockerfile

FROM golang:1.14.1-alpine3.11

RUN apk add --no-cache ca-certificates git

# Enable Go Modules
ENV GO111MODULE=on

# Set the Current Working Directory inside the container
WORKDIR /app

# Copy go mod and sum files
COPY ../../go.mod go.sum ./

RUN go mod download

COPY . .

RUN CGO_ENABLED=0 go build -o service-a

ENTRYPOINT ["/app/service-a"]

Что мне нужно сделать, чтобы иметь возможность добавлять файлы в мое Docker изображение, которые не отображаются? в текущем каталоге без необходимости иметь отдельные go .mod и go .sum в каждом сервисе в рамках monorepo?

1 Ответ

1 голос
/ 13 апреля 2020

Docker позволяет только добавлять файлы к изображению из контекста, который по умолчанию является каталогом, содержащим Dockerfile. Вы можете указать другой контекст при сборке, но, опять же, он не позволит вам включать файлы вне этого контекста:

docker build -f ./services/service-a/Dockerfile .

Это должно использовать текущий каталог в качестве контекста.

Кроме того, вы можете создать временный каталог, скопировать все артефакты и использовать его в качестве контекста сборки. Это можно автоматизировать с помощью make-файла или сценария сборки.

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