告别龟速下载,一招让 apt-get 飞起来


前言:一个让人抓狂的场景

作为一名 Docker 用户,相信很多朋友都遇到过这样的场景:

docker exec -it my_container /bin/bash
apt-get update
apt-get install -y iputils-ping

然后,就是漫长的等待……看着进度条像蜗牛一样爬,心里一万只羊驼奔腾而过。

别急,这个问题我刚刚遇到过,并且完美解决了。今天就把完整的解决过程分享给大家,希望能帮你节省宝贵的生命时间。


问题根源:为什么这么慢?

Docker 官方镜像默认使用的是国外的软件源(deb.debian.orgsecurity.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/debianhttps://mirrors.tuna.tsinghua.edu.cn/debian-security
中科大http://mirrors.ustc.edu.cn/debianhttp://mirrors.ustc.edu.cn/debian-security
腾讯云http://mirrors.cloud.tencent.com/debianhttp://mirrors.cloud.tencent.com/debian-security
华为云https://mirrors.huaweicloud.com/debianhttps://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 操作都会使用国内源,速度飞快!✨


小贴士

  1. 镜像体积:安装 iputils-ping 只增加约 1-2 MB,影响不大,可以放心安装。
  2. Alpine 用户注意:如果你使用的是 Alpine 镜像,安装命令是 apk add iputils,而不是 apt-get
  3. 安全性:更换源通常不影响安全性,因为 APT 有 GPG 签名验证机制,会校验软件包的完整性。
  4. 版本差异:如果你的 Debian 版本较老(如 Debian 11),可能还是使用传统的 sources.list 文件,直接修改那个文件即可。

结语

在 Docker 容器中配置国内源,看似是个小问题,但确实能极大提升工作效率。希望这篇文章能帮你少走一些弯路。


本文首发于jujingweb,欢迎转载,请注明出处👍。