You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker构建器模式下无法拉取本地构建镜像的问题求助

问题:Docker多阶段构建无法使用本地镜像,总是尝试从docker.io拉取

我在基于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使用本地构建的me/base镜像,而非从docker.io拉取?目前优先实现流程,暂不考虑优化。


解决方案

  • 修改镜像引用前缀,明确指向本地镜像:Docker会将带有<用户名>/<镜像名>格式的标签默认识别为Docker Hub仓库的镜像,因此会尝试拉取。要强制使用本地镜像,可在FROM指令中添加localhost/前缀,修改/api目录下Dockerfile的第一行:

    FROM localhost/me/base as base
    

    这样Docker会直接查找本地的localhost/me/base镜像,不会去远程仓库拉取。

  • 构建时添加--pull never参数:在构建api的Dockerfile时,执行以下命令,禁止Docker尝试拉取任何基础镜像,强制使用本地已存在的版本:

    docker build ./apps/api --pull never -t me/api
    
  • 确认镜像标签完全匹配:检查本地镜像的标签是否为me/base:latest(Docker默认会给未指定标签的镜像加上latest),执行docker image ls查看详情。如果本地镜像使用了自定义标签,比如me/base:v1,需要在FROM指令中指定完整标签:

    FROM me/base:v1 as base
    

内容的提问来源于stack exchange,提问作者JC97

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 20:05:32