Docker容器内apt-get操作异常缓慢问题求助
Docker容器内
apt-get update/apt-get install异常缓慢的排查与解决建议 问题描述
近期在Docker镜像构建或容器内执行apt-get update、apt-get install时出现异常缓慢(近乎停滞)的情况,相关输出示例:
---> Running in 04b74c43b24e Get:1 http://security.ubuntu.com/ubuntu focal-security InRelease [114 kB] Get:2 http://security.ubuntu.com/ubuntu focal-security/multiverse amd64 Packages [34.9 kB] Get:3 http://security.ubuntu.com/ubuntu focal-security/universe amd64 Packages [931 kB] Get:4 http://security.ubuntu.com/ubuntu focal-security/restricted amd64 Packages [1655 kB] Get:5 http://archive.ubuntu.com/ubuntu focal InRelease [265 kB] Get:6 http://security.ubuntu.com/ubuntu focal-security/main amd64 Packages [2269 kB]
已确认信息:
- 宿主机执行相同操作无此问题
- 尝试通过
--ulimit nofile=:1024:2048参数限制容器文件描述符,无效 - 处于代理网络,代理配置已确认正确
- Docker版本信息:
╰─>$ docker version Client: Docker Engine - Community Version: 20.10.18 API version: 1.41 Go version: go1.18.6 Git commit: b40c2f6 Built: Thu Sep 8 23:11:45 2022 OS/Arch: linux/amd64 Context: default Experimental: true Server: Docker Engine - Community Engine: Version: 20.10.18 API version: 1.41 (minimum version 1.12) Go version: go1.18.6 Git commit: e42327a Built: Thu Sep 8 23:09:37 2022 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.6.8 GitCommit: 9cd3357b7fd7218e4aec3eae239db1f68a5a6ec6 runc: Version: 1.1.4 GitCommit: v1.1.4-0-g5fd4c4d docker-init: Version: 0.19.0 GitCommit: de40ad0
排查与解决建议
1. 替换Ubuntu软件源为国内镜像
默认官方源在国内访问延迟高,替换为国内镜像源可显著提升速度:
- Dockerfile中添加替换步骤:
RUN sed -i 's/security.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list && \ sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list
- 已运行容器内直接修改
/etc/apt/sources.list后执行apt-get update
2. 调整Docker网络配置
- 切换网络模式为host,复用宿主机网络测试:
docker run --network host -it ubuntu:focal bash
进入容器后执行apt-get update验证速度
- 配置国内DNS服务器,编辑
/etc/docker/daemon.json:
{ "dns": ["223.5.5.5", "114.114.114.114"] }
修改后重启Docker服务:systemctl restart docker
3. 提升apt-get并发连接数
默认并发数较低,通过配置或命令参数提升:
- 创建
/etc/apt/apt.conf.d/99parallel文件:
Acquire::http::Pipeline-Depth "5"; Acquire::http::No-Cache "true"; Acquire::Queue-Mode "access"; Acquire::http::Max-Active "20";
- 执行命令时临时指定:
apt-get update -o Acquire::http::Max-Active=20
4. 排查网络层限制
- 检查宿主机iptables规则,确认未限制容器网络流量
- 测试容器网络连通性:
docker run -it ubuntu:focal bash -c "ping mirrors.aliyun.com && curl -O http://mirrors.aliyun.com/ubuntu/dists/focal/InRelease"
- 若存在带宽限制,运行容器时添加网络权限:
docker run --network bridge --cap-add NET_ADMIN -it ubuntu:focal bash
5. 升级Docker组件
当前Docker版本较旧,部分网络bug已在新版本修复:
- 升级Docker Engine到最新稳定版
- 同步升级containerd、runc到兼容版本
内容的提问来源于stack exchange,提问作者dpatel257
相关产品推荐
相关产品推荐

