![](/img/trans.png)
[英]'docker-compose pull' can't pull image that is pullable by 'docker'
[英]Docker can't pull local built image in builder pattern
我正在尝试使用 pnpm 和 turbo 在我的 monorepo 中设置构建流程。
我的目标是拥有这样的结构:
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 pnpm@7.16.0
# 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 pnpm@7.16.0
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
)。
接下来,我尝试在/apps/api
中运行 Dockerfile
但它失败了:
[+] 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: How to split up into multiple Dockerfiles
我如何确保它不是从docker.io
中提取,而是从我本地构建的映像中提取?
注意:我知道可以进行一些优化,但作为第一个版本,我首先想让这个设置正常工作。
好的,我的问题是我必须在基础映像中使用--platform=linux/amd64
以确保prisma
依赖项仍然有效。
这意味着我还必须在后续图像中使用它,否则它无法找到本地(然后是 ARM64,因为我在 m1 mac 上)图像。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.