Docker не может извлечь локальный встроенный образ в шаблоне построителя

Я пытаюсь настроить поток сборки в своем монорепозитории с помощью pnpm и turbo.

Моя цель - иметь такую ​​​​структуру:

apps/
    web/
       Dockerfile
    api/
       Dockerfile
Dockerfile
package.json
pnpm-lock.yaml
turbo.json

Где корневой файл Dockerfile выглядит так:

FROM --platform=linux/amd64 node:18-alpine as builder

WORKDIR /usr/src/app

# Prerequisites
RUN apk add --no-cache libc6-compat
RUN apk update
RUN npm install -g [email protected]

# Copy dependency definitions
COPY package.json ./
COPY pnpm*.yaml ./
COPY .npmrc ./
RUN pnpm fetch

# Set CI to true to disable lefthook hooks
ENV CI=true

# Copy all other files
COPY . ./

И тогда /api Dockerfile выглядит так (на основе этого примера):

FROM me/base as base

FROM node:18-alpine as api-builder
WORKDIR /usr/src/app

# Prerequisites
RUN apk add --no-cache libc6-compat
RUN apk update
RUN npm install -g turbo

COPY --from=base /usr/src/app /usr/src/app/
RUN turbo prune --scope=api --docker


FROM node:18-alpine as api-installer
WORKDIR /usr/src/app

# Prerequisites
RUN apk add --no-cache libc6-compat
RUN apk update
RUN npm install -g [email protected]

COPY --from=api-builder /usr/src/app/out/json ./
COPY --from=api-builder /usr/src/app/pnpm-lock.yaml ./pnpm-lock.json
RUN pnpm install --filter=api --offline

COPY --from=api-builder /usr/src/app/out/full .
COPY --from=api-builder /usr/src/app/turbo.json ./turbo.json


FROM node:18-alpine as api-runner
WORKDIR /usr/src/app

RUN addgroup --system --gid 1001 nodejs
RUN adduser --system --uid 1001 runner
USER runner

COPY --from=api-installer /app/apps/api/package.json .

COPY --from=api-installer --chown=runner:nodejs /app/apps/api/build ./

ENTRYPOINT [ "node", "apps/api/build/server.js" ]

Я начинаю с создания базового образа следующим образом:

docker build . -t me/base

И я дважды проверил, что изображение эффективно построено (docker image ls).

Далее я пытаюсь запустить Dockerfile внутри /apps/api

Но там это терпит неудачу с:

[+] Building 0.7s (4/4) FINISHED
 => [internal] load build definition from Dockerfile                                                                                                                                                                         0.0s
 => => transferring dockerfile: 1.08kB                                                                                                                                                                                       0.0s
 => [internal] load .dockerignore                                                                                                                                                                                            0.0s
 => => transferring context: 2B                                                                                                                                                                                              0.0s
 => ERROR [internal] load metadata for docker.io/me/base:latest                                                                                                                                                          0.6s
 => CANCELED [internal] load metadata for docker.io/library/node:18-alpine                                                                                                                                                   0.6s
------
 > [internal] load metadata for docker.io/me/base:latest:
------
failed to solve with frontend dockerfile.v0: failed to create LLB definition: pull access denied, repository does not exist or may require authorization: server message: insufficient_scope: authorization failed

Я черпал вдохновение из Docker Multi-Stage: как разделить на несколько Dockerfiles

Как я могу убедиться, что он не извлекается из docker.io, а вместо этого из моего локального встроенного образа?

ПРИМЕЧАНИЕ. Я знаю, что могут быть некоторые оптимизации, но в качестве первой версии я сначала хочу, чтобы эта настройка работала.

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

Ответы 1

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

Хорошо, моя проблема заключалась в том, что мне пришлось использовать --platform=linux/amd64 в базовом изображении, чтобы убедиться, что зависимость prisma все еще работает.

Это означает, что я также должен использовать это в последующих изображениях, потому что иначе он не сможет найти локальный образ (тогда ARM64, так как я на m1 mac).

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