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

使用docker-compose build构建镜像卡顿并报错的技术求助

Docker镜像构建卡在apt阶段,Debian源连接超时

问题现象

使用docker-compose build构建镜像时,卡在9/38阶段,最终因Debian官方软件源连接超时失败,错误提示无法获取http://deb.debian.org/debian/dists/bookworm/main/binary-amd64/Packages。

核心Dockerfile代码

###########
## BUILDER ##
###########

# pull official base image
FROM --platform=linux/amd64 python:3.9-slim as builder

# set work directory
WORKDIR /app

# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# install system dependencies
RUN apt-get update -y && \ 
    apt-get install -y --no-install-recommends gcc python3-psycopg2 apache2 apache2-dev default-libmysqlclient-dev

#########
# FINAL #
#########

# pull official base image
FROM --platform=linux/amd64 python:3.9-slim

# install psycopg2 dependencies
RUN apt update -y && apt-get install -y default-mysql-client wget python3-psycopg2 apache2 build-essential libpq-dev wkhtmltopdf && rm -rf /var/lib/apt/lists/*

EXPOSE 8080
RUN ["chmod", "+x", "./start.sh"]
CMD ["sh", "-c", "./start.sh"]

构建错误日志

CANCELED [celery-worker builder 3/8] RUN apt-get update -y &&     apt-get install -y --no-install-recommends gcc python3-psycopg2 apache2 apache2-dev d  433.7s 
 => ERROR [celery-beat stage-1  2/14] RUN apt update -y && apt-get install -y default-mysql-client wget python3-psycopg2 apache2 build-essential libpq-dev   433.7s 
------
 > [celery-beat stage-1  2/14] RUN apt update -y && apt-get install -y default-mysql-client wget python3-psycopg2 apache2 build-essential libpq-dev wkhtmltopdf && rm -rf /var/lib/apt/lists/*:
0.771
0.771 WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
0.771
3.958 Get:1 http://deb.debian.org/debian bookworm InRelease [147 kB]
8.457 Get:2 http://deb.debian.org/debian bookworm-updates InRelease [52.1 kB]
13.23 Get:3 http://deb.debian.org/debian-security bookworm-security InRelease [48.0 kB]
22.09 Get:4 http://deb.debian.org/debian bookworm/main amd64 Packages [8904 kB]
173.5 Ign:4 http://deb.debian.org/debian bookworm/main amd64 Packages
191.7 Ign:5 http://deb.debian.org/debian-security bookworm-security/main amd64 Packages
198.9 Get:4 http://deb.debian.org/debian bookworm/main amd64 Packages [8904 kB]
228.9 Ign:4 http://deb.debian.org/debian bookworm/main amd64 Packages
239.2 Get:5 http://deb.debian.org/debian-security bookworm-security/main amd64 Packages [47.3 kB]
262.9 Get:4 http://deb.debian.org/debian bookworm/main amd64 Packages [8904 kB]
429.6 Ign:4 http://deb.debian.org/debian bookworm/main amd64 Packages
433.6 Ign:4 http://deb.debian.org/debian bookworm/main amd64 Packages
433.6 Err:4 http://deb.debian.org/debian bookworm/main amd64 Packages
433.6   连接超时 [IP: 199.232.22.132 80]
433.6 Ign:4 http://deb.debian.org/debian bookworm/main amd64 Packages
433.6 Err:4 http://deb.debian.org/debian bookworm/main amd64 Packages
433.6   连接超时 [IP: 199.232.22.132 80]
433.6 Ign:4 http://deb.debian.org/debian bookworm/main amd64 Packages
433.6 Err:4 http://deb.debian.org/debian bookworm/main amd64 Packages
433.6   连接超时 [IP: 199.232.22.132 80]
433.7 Fetched 294 kB in 7min 13s (680 B/s)
433.7 Reading package lists...
433.7 E: 无法获取 http://deb.debian.org/debian/dists/bookworm/main/binary-amd64/Packages  连接超时 [IP: 199.232.22.132 80]
433.7 E: 部分索引文件下载失败,已忽略或使用旧文件替代。
------
failed to solve: process "/bin/sh -c apt update -y && apt-get install -y default-mysql-client wget python3-psycopg2 apache2 build-essential libpq-dev wkhtmltopdf && rm -rf /var/lib/apt/lists/*"

解决方案

1. 替换为国内Debian镜像源

在执行apt update前,将官方源替换为国内镜像(比如阿里云、清华源),大幅提升下载速度:
修改Dockerfile中两个阶段的RUN命令:

# Builder阶段替换源并安装依赖
RUN sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list && \
    apt-get update -y && \
    apt-get install -y --no-install-recommends gcc python3-psycopg2 apache2 apache2-dev default-libmysqlclient-dev

# Final阶段替换源并安装依赖
RUN sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list && \
    apt update -y && apt-get install -y default-mysql-client wget python3-psycopg2 apache2 build-essential libpq-dev wkhtmltopdf && rm -rf /var/lib/apt/lists/*

2. 给apt添加超时与重试参数

针对网络波动问题,给apt命令添加超时和重试配置,避免单次连接失败就终止构建:

RUN apt-get update -o Acquire::http::Timeout=30 -o Acquire::Retries=3 -y && \
    apt-get install -y --no-install-recommends gcc python3-psycopg2 apache2 apache2-dev default-libmysqlclient-dev

3. 检查Docker网络连通性

先验证Docker容器能否访问外部网络:

docker run --rm debian:bookworm ping deb.debian.org

如果无法ping通,检查宿主机网络状态,或配置Docker代理(若处于内网环境)。

4. 复用Builder阶段的依赖(优化)

两个阶段都安装了apache2、python3-psycopg2等重复依赖,可从Builder阶段复制已安装文件,减少重复下载:

# 在Final阶段添加
COPY --from=builder /usr/lib /usr/lib
COPY --from=builder /usr/bin /usr/bin
# 再安装剩余差异依赖

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 08:45:13