使用 python 镜像,添加非自由的 Debian 存储库?



我在 docker 中使用了 python 映像,并添加了一些依赖项,如下所示:

RUN apt-get update -y 
&& apt-get install -y apt-utils libsasl2-dev python3-dev libldap2-dev libssl-dev libsnmp-dev snmp-mibs-downloader

我收到错误

E: Package 'snmp-mibs-downloader' has no installation candidate

搜索后是因为我需要按照以下方式添加非自由存储库:http://installion.co.uk/debian/wheezy/non-free/s/snmp-mibs-downloader/install/index.html

我相信我需要编辑/etc/apt/sources.list 并添加以下内容:

deb http://http.us.debian.org/debian jessie main contrib non-free
deb http://security.debian.org jessie/updates main contrib non-free

但是我如何通过 docker 文件做到这一点?

虽然这是正确的命令,

sed -i -e's/ main/ main contrib non-free/g' /etc/apt/sources.list

如果要执行此操作,则应将其作为第一张图像其余部分的一部分,

RUN 
sed -i -e's/ main/ main contrib non-free/g' /etc/apt/sources.list 
&& apt-get -q update                                              
&& apt-get -qy dist-upgrade                                       
&& apt-get install -qy foobar                                     
&& foobar whatever                                                
&& apt-get -qy --purge remove foobar                              
&& apt-get clean                                                  
&& rm -rf /var/lib/apt/lists

上面显示了此命令与其余apt内容的完整流程。

与将non-free组件添加到sources.list的方式相同。编辑 Dockerfile 中的/etc/apt/sources.list文件并替换如下所示的行:

deb http://http.us.debian.org/debian jessie main contrib

deb http://http.us.debian.org/debian jessie main contrib non-free

您可以在 Dockerfile 中使用类似命令执行此操作

sed -i "s#deb http://http.us.debian.org/debian jessie main contrib non-free#deb http://http.us.debian.org/debian jessie main contrib non-free#g" /etc/apt/sources.list

security.debian.org也是如此.

您可以使用其他答案提供的任何脚本。 我刚刚用sed做了一些测试。 这个sed对我有用:

sudo sed -i -e "s/ main[[:space:]]*$/ main contrib non-free/" /etc/apt/sources.list

基本上它匹配"main",空格和行尾。 这基本上意味着 main 是该行中的最后一个回购。 如果匹配,则在末尾添加 contrib 和 non-free。 如果要对其进行测试,请删除 -i 以就地编辑。

这个sed的好处是它在重复使用时不会重复存储库。 因此,没有机会有重复的存储库。

最新更新