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

Docker Compose构建自定义镜像传参时提示拉取访问被拒

问题根因

首次执行docker-compose up -d时,Docker Compose默认不会自动识别跨服务的本地镜像依赖顺序:

  • 构建cm服务时,其Dockerfile通过构建参数MY_TOOLS引用mytools作为基础镜像,Compose会优先尝试从远程镜像仓库拉取该镜像,不会等待本地tools服务的构建任务完成
  • 由于mytools是你本地自定义构建的镜像,从未推送到任何可访问的远程仓库,远程拉取请求直接触发权限拒绝报错,也就是你看到的pull access denied提示
  • 首次执行流程虽然整体报错,但tools服务的mytools镜像实际已经在本地构建完成,第二次执行docker-compose up时Compose能直接在本地找到该镜像,不需要发起远程拉取,因此可以正常运行。

注:报错信息中提到的lvtools属于配置拼写误差,可自行排查是否存在变量或镜像名写错的情况。

修复方案

不需要拆分多个Compose配置文件,在现有单文件内补充两项配置即可解决首次构建失败的问题:

  1. 给cm服务显式声明对tools服务的依赖,强制Compose先完成tools服务的构建,再启动cm服务的构建流程
  2. 给cm服务配置构建时不拉取远程镜像的规则,避免对本地自定义的mytools镜像发起无效的远程拉取请求

调整后的服务配置如下:

tools:
  image: mytools
  build:
    context: ./docker/build/mytools
    args:
      BASE_IMAGE: ${SOLUTION_BASE_IMAGE}

cm:
  image: ${REGISTRY}${COMPOSE_PROJECT_NAME}-xm1-cm:${VERSION:-latest}
  depends_on:
    tools:
      condition: service_completed_successfully
  build:
    context: ./docker/build/cm
    pull_policy: never
    args:
      MY_TOOLS: mytools
验证方法

修改配置后,先清理本地旧的构建缓存,再执行启动命令即可验证首次构建正常:

# 停止现有容器,删除本地构建的自定义镜像
docker-compose down --rmi local
# 重新启动,首次执行即可正常完成构建,不会出现拉取权限报错
docker-compose up -d

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 19:27:29