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

部署DMS时如何用docker-compose加载本地Docker镜像?加载失败求助

解决Docker Compose加载本地镜像tar文件的问题

问题原因分析

你当前的Dockerfile写法错误:FROM docker:latest 是基于Docker CLI镜像构建,而在镜像构建过程中,容器内部没有运行Docker守护进程,因此docker load命令无法执行,这就是你看到exit code:1错误的原因。此外,这种方式也无法将tar中的镜像作为服务容器的基础镜像来使用。

解决方案

方案1:预加载本地镜像(最简单高效)

直接在宿主机上加载所有tar文件,之后在docker-compose中直接引用镜像名称即可,Docker会自动使用本地已加载的镜像,不会从仓库拉取。

  1. 执行以下命令加载所有本地tar文件:
# 加载postgres镜像
docker load -i ./images/postgres/postgres.tar
# 加载gotenberg镜像
docker load -i ./images/gotenberg/gotenberg.tar
# 加载tika镜像
docker load -i ./images/tika/tika.tar
# 加载paperless镜像
docker load -i ./images/paperless/paperless-ngx.tar
# 加载redis镜像
docker load -i ./images/redis/redis.tar
  1. 修改docker-compose.yml,恢复使用image字段替代build字段:
version: "3.4"
services:
  db:
    image: docker.io/library/postgres:15 # 使用本地已加载的镜像
    restart: unless-stopped
    volumes:
      - /home/${USER}/paperless-ngx/paperless/dbdata:/var/lib/postgresql/data
  # 其他服务同理,恢复为对应的image字段

方案2:通过Dockerfile直接从tar构建镜像(无需手动预加载)

如果你希望完全通过docker-compose自动处理,可修改每个镜像文件夹下的Dockerfile,直接将tar文件作为基础镜像导入:

  1. 修改每个服务的Dockerfile(以postgres为例):
# ./images/postgres/dockerfile
FROM scratch
ADD postgres.tar /

该写法会将tar文件中的镜像内容直接导入到空镜像(scratch)中,生成与原镜像完全一致的新镜像。

  1. 调整docker-compose.yml的build配置,移除无用的args参数:
version: "3.4"
services:
  db:
    build:
      context: ./images/postgres
      dockerfile: dockerfile
    restart: unless-stopped
    volumes:
      - /home/${USER}/paperless-ngx/paperless/dbdata:/var/lib/postgresql/data
  # 其他服务同理,保持build路径对应各自的镜像文件夹
  1. 执行构建命令:
docker-compose build

构建完成后,docker-compose会使用这些本地构建的镜像启动服务,完全不依赖在线仓库。

内容的提问来源于stack exchange,提问作者Germán

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 23:35:34