告别龟速下载,一招让 apt-get 飞起来
前言:一个让人抓狂的场景
作为一名 Docker 用户,相信很多朋友都遇到过这样的场景:
docker exec -it my_container /bin/bash
apt-get update
apt-get install -y iputils-ping
然后,就是漫长的等待……看着进度条像蜗牛一样爬,心里一万只羊驼奔腾而过。
别急,这个问题我刚刚遇到过,并且完美解决了。今天就把完整的解决过程分享给大家,希望能帮你节省宝贵的生命时间。
问题根源:为什么这么慢?
Docker 官方镜像默认使用的是国外的软件源(deb.debian.org 和 security.debian.org)。在国内访问这些源,速度慢、延迟高,甚至有时候直接超时,这都是很正常的现象。
解决思路也很简单:换成国内的镜像源。
踩坑实录:我的 sources.list 去哪儿了?
按照网上的教程,我首先尝试了传统的换源方法:
cp /etc/apt/sources.list /etc/apt/sources.list.bak
sed -i 's|http://deb.debian.org|http://mirrors.aliyun.com|g' /etc/apt/sources.list
结果却得到了这样的报错:
cp: cannot stat '/etc/apt/sources.list': No such file or directory
sed: can't read /etc/apt/sources.list: No such file or directory
查看 /etc/apt/ 目录后发现,里面并没有传统的 sources.list 文件,只有 sources.list.d 目录。
原来,Debian 12 (Bookworm) 及更新版本采用了新的仓库配置格式,将源配置放在了 /etc/apt/sources.list.d/debian.sources 文件中。这是 Debian 的新特性,但确实让不少习惯了旧方式的朋友踩了坑。
解决方案:新格式下的换源操作
方案一:直接修改 debian.sources 文件
第一步:查看现有配置
cat /etc/apt/sources.list.d/debian.sources
你会看到类似这样的内容:
Types: deb
URIs: http://deb.debian.org/debian
Suites: bookworm bookworm-updates
Components: main contrib non-free non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
Types: deb
URIs: http://security.debian.org/debian-security
Suites: bookworm-security
Components: main contrib non-free non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
第二步:备份并替换源地址
# 备份原文件
cp /etc/apt/sources.list.d/debian.sources /etc/apt/sources.list.d/debian.sources.bak
# 替换为阿里云镜像源
sed -i 's|http://deb.debian.org|http://mirrors.aliyun.com|g' /etc/apt/sources.list.d/debian.sources
sed -i 's|http://security.debian.org|http://mirrors.aliyun.com|g' /etc/apt/sources.list.d/debian.sources
第三步:更新并安装
apt-get update
apt-get install -y iputils-ping
这下速度就起飞了!🚀
方案二:创建传统的 sources.list(备用方案)
如果你更喜欢传统的配置方式,或者方案一没有生效,可以创建 /etc/apt/sources.list 文件:
cat > /etc/apt/sources.list << EOF
deb http://mirrors.aliyun.com/debian bookworm main contrib non-free non-free-firmware
deb http://mirrors.aliyun.com/debian bookworm-updates main contrib non-free non-free-firmware
deb http://mirrors.aliyun.com/debian-security bookworm-security main contrib non-free non-free-firmware
EOF
apt-get update
apt-get install -y iputils-ping
方案三:在 Dockerfile 中一劳永逸(推荐)
如果你需要经常使用这个镜像,建议在 Dockerfile 中配置好源,这样每次构建出来的镜像都自带国内源:
FROM debian:latest
# 方案 A:修改新格式的 debian.sources
RUN sed -i 's|http://deb.debian.org|http://mirrors.aliyun.com|g' /etc/apt/sources.list.d/debian.sources && \
sed -i 's|http://security.debian.org|http://mirrors.aliyun.com|g' /etc/apt/sources.list.d/debian.sources
# 或者方案 B:创建传统的 sources.list
# RUN echo "deb http://mirrors.aliyun.com/debian bookworm main contrib non-free non-free-firmware" > /etc/apt/sources.list && \
# echo "deb http://mirrors.aliyun.com/debian bookworm-updates main contrib non-free non-free-firmware" >> /etc/apt/sources.list && \
# echo "deb http://mirrors.aliyun.com/debian-security bookworm-security main contrib non-free non-free-firmware" >> /etc/apt/sources.list
RUN apt-get update && apt-get install -y iputils-ping
国内镜像源推荐
除了阿里云,还有这些好用的国内镜像源:
| 镜像站 | Debian 源地址 | Security 源地址 |
|---|---|---|
| 清华大学 | https://mirrors.tuna.tsinghua.edu.cn/debian | https://mirrors.tuna.tsinghua.edu.cn/debian-security |
| 中科大 | http://mirrors.ustc.edu.cn/debian | http://mirrors.ustc.edu.cn/debian-security |
| 腾讯云 | http://mirrors.cloud.tencent.com/debian | http://mirrors.cloud.tencent.com/debian-security |
| 华为云 | https://mirrors.huaweicloud.com/debian | https://mirrors.huaweicloud.com/debian-security |
| 网易 | http://mirrors.163.com/debian | (通常与主源相同) |
选择其中一个即可,速度都很快。
极简一步到位
如果你想在容器里一句话解决所有问题,直接复制运行这个命令:
cp /etc/apt/sources.list.d/debian.sources /etc/apt/sources.list.d/debian.sources.bak && \
sed -i 's|http://deb.debian.org|http://mirrors.aliyun.com|g' /etc/apt/sources.list.d/debian.sources && \
sed -i 's|http://security.debian.org|http://mirrors.aliyun.com|g' /etc/apt/sources.list.d/debian.sources && \
apt-get update && apt-get install -y iputils-ping
执行完成后,ping 命令就安装好了,而且以后的 apt-get 操作都会使用国内源,速度飞快!✨
小贴士
- 镜像体积:安装
iputils-ping只增加约 1-2 MB,影响不大,可以放心安装。 - Alpine 用户注意:如果你使用的是 Alpine 镜像,安装命令是
apk add iputils,而不是apt-get。 - 安全性:更换源通常不影响安全性,因为 APT 有 GPG 签名验证机制,会校验软件包的完整性。
- 版本差异:如果你的 Debian 版本较老(如 Debian 11),可能还是使用传统的
sources.list文件,直接修改那个文件即可。
结语
在 Docker 容器中配置国内源,看似是个小问题,但确实能极大提升工作效率。希望这篇文章能帮你少走一些弯路。
本文首发于jujingweb,欢迎转载,请注明出处👍。