使用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
相关产品推荐
相关产品推荐

