在构建Docker镜像时,可以通过覆盖/etc/apt/sources.list
来设置自定义的apt镜像,例如:
FROM ubuntu:focal
RUN echo "deb mirror://mirrors.ubuntu.com/mirrors.txt focal main restricted universe multiverse" > /etc/apt/sources.list && \
echo "deb mirror://mirrors.ubuntu.com/mirrors.txt focal-updates main restricted universe multiverse" >> /etc/apt/sources.list && \
echo "deb mirror://mirrors.ubuntu.com/mirrors.txt focal-security main restricted universe multiverse" >> /etc/apt/sources.list
...
如果基础镜像是一个变量,例如FROM ${DISTRO}
,则应根据Ubuntu版本调整sources.list
。
我尝试了以下命令:$(lsb_release -cs)
RUN echo "deb mirror://mirrors.ubuntu.com/mirrors.txt $(lsb_release -cs) main restricted universe multiverse" > /etc/apt/sources.list && \
echo "deb mirror://mirrors.ubuntu.com/mirrors.txt $(lsb_release -cs)-updates main restricted universe multiverse" >> /etc/apt/sources.list && \
echo "deb mirror://mirrors.ubuntu.com/mirrors.txt $(lsb_release -cs)-security main restricted universe multiverse" >> /etc/apt/sources.list
但是它提示 lsb_release: not found
。
解决方法是在运行之前安装这个包。
RUN apt-get update && apt-get install -y lsb-release
然而,在某些地区,安装lsb-release
包可能非常缓慢。
因此问题是,有没有一种适当的方法在使用apt之前设置apt源镜像呢?
sed
字符串中有斜杠时,可以选择不同的分隔符来避免 "leaning toothpick syndrome",例如sed -i -e 's#http://...#...#
,这样命令会更易读(易写)。 - Bogd