[构建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源镜像?
lsb-release
软件包不包含在最小的Ubuntu映像中,但是您可以改用/etc/lsb-release
或/etc/os-release
文件(第二个是常用的,请参考this answer进行比较)。] >
对于Dockerfile,只需将$(lsb_release -cs)
更改为$(. /etc/os-release && echo $VERSION_CODENAME)
,您就不会在更新和安装软件包上浪费时间。