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

更新Docker后出现failed to solve错误(代码100)求助

Docker构建失败排查(apt-get退出码100)

问题背景

更新Docker后,未修改任何代码,执行docker compose --profile appnm up -d时构建失败,错误提示:

failed to solve: executor failed running [/bin/sh -c apt-get update -qq && apt-get install -y build-essential]: exit code: 100

此前相同的Docker Compose配置与Dockerfile可正常运行。

相关配置文件

Docker Compose配置

version: '3.9'

services:

  # web service (connected to local DB)
  web: &web
    container_name: web
    env_file: .env
    deploy:
      resources:
        limits:
          cpus: '2'
          memory: 2G
    build:
        context: .
        dockerfile: Dockerfile
    command: /bin/sh -c "rm -f /app/tmp/pids/server.pid && gem install bundler -v 2.2.21 && bundle install && rails db:migrate && rails server --port 3000 --binding 0.0.0.0"
    ports:
      - 3000:3000
      - 5432:5432
      - 2222:2222
    volumes:
      - ../:/app:cached
      - bundle:/usr/local/bundle
      - rails_cache:/app/tmp/cache
      - node_modules:/app/node_modules
    depends_on:
      - db
    profiles:
      - app
      - appnm

  # database
  db:
    container_name: db
    image: postgres:14.2
    volumes:
      - .psqlrc:/root/.psqlrc:ro
      - dbdat:/var/lib/postgresql/data
      - ./log:/root/log:cached
      - ./hlp-db.dump:/hlp-db.dump
    environment:
      - POSTGRES_DB
      - POSTGRES_USER
      - POSTGRES_PASSWORD
    ports:
      - 5432
    healthcheck:
      test: pg_isready -U postgres -h 127.0.0.1
      interval: 5s
    profiles:
      - app
      - appnm
      - db

  # database admin
  db-admin:
    container_name: dbAdmin
    image: adminer
    ports:
      - 1933:8080
    depends_on:
      - db
    profiles:
      - app
      - appnm
      - db

volumes:
  web:
  bundle:
  dbdat:
  node_modules:
  rails_cache:

Dockerfile

FROM ruby:2.7.4
RUN apt-get update -qq && apt-get install -y build-essential
RUN apt-get install -y nodejs
ENV APP_HOME /app
RUN mkdir $APP_HOME
WORKDIR $APP_HOME
EXPOSE 3000

排查与解决方法

  • 清理构建缓存:Docker更新后可能残留旧的镜像层,运行以下命令强制清理:

    docker builder prune -a
    

    之后重新执行构建命令,避免缓存导致的源更新失败。

  • 检查容器网络连通性:apt-get退出码100通常是网络问题,验证容器能否访问外部源:

    # 启动临时容器测试网络
    docker run --rm ruby:2.7.4 ping deb.debian.org -c 3
    

    如果ping不通,检查Docker的网络配置(如代理、防火墙规则)。

  • 替换apt源:ruby:2.7.4基于Debian Bullseye,默认源可能访问不稳定,修改Dockerfile替换为国内镜像源:

    FROM ruby:2.7.4
    # 替换为清华Debian镜像源
    RUN sed -i 's/deb.debian.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list
    RUN apt-get update -qq && apt-get install -y build-essential
    RUN apt-get install -y nodejs
    ENV APP_HOME /app
    RUN mkdir $APP_HOME
    WORKDIR $APP_HOME
    EXPOSE 3000
    
  • 查看详细构建日志:使用无缓存构建并查看完整输出,定位具体错误:

    docker compose build --no-cache web
    

    日志会显示apt-get update或install时的具体失败原因(如某个源无法访问、包依赖问题)。

  • 验证Docker Compose兼容性:部分Docker更新后,docker compose命令可能存在兼容性问题,尝试使用旧版命令:

    docker-compose --profile appnm up -d
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 07:14:59