在docker python上使用apt-get失败:2.7.12-wheezy图像

我想使用python图像来运行python脚本,但是,我也需要在同一图像上的gawk。 所以我想先安装gawk。 (为什么gawk?默认情况下机器上的mawk版本没有我需要的选项。)

我得到错误“E:无法find包gawk”,当我GOOGLE了,说我需要更新/etc/apt/sources.list ,但我也无法做到这一点。 (试过echo '<src>'>>/etc/apt/sources.list ,它没有返回这样的文件。)

这是我跑的:

 $ docker run -w $WORKSPACE -v $WORKSPACE:$WORKSPACE python:2.7.12-wheezy apt- get install gawk Reading package lists... Building dependency tree... Reading state information... E: Unable to locate package gawk 

这不是networking问题,我可以运行更新和wget等。

 $ docker run -w $WORKSPACE -v $WORKSPACE:$WORKSPACE python:2.7.12-wheezy apt-get update Get:1 http://security.debian.org wheezy/updates Release.gpg [1554 B] Get:2 http://security.debian.org wheezy/updates Release [39.0 kB] Get:3 http://deb.debian.org wheezy Release.gpg [2373 B] Get:4 http://security.debian.org wheezy/updates/main amd64 Packages [565 kB] Get:5 http://deb.debian.org wheezy-updates Release.gpg [1554 B] Get:6 http://deb.debian.org wheezy Release [191 kB] Get:7 http://deb.debian.org wheezy-updates Release [155 kB] Get:8 http://deb.debian.org wheezy/main amd64 Packages [7634 kB] Get:9 http://deb.debian.org wheezy-updates/main amd64 Packages [7481 B] Fetched 8597 kB in 14s (584 kB/s) Reading package lists... 

它似乎在交互模式下工作正常:

 $ docker run -it python:2.7.12-wheezy bash root@0d7daa6b998e:/# apt-get update ... edited .. Reading package lists... Done root@0d7daa6b998e:/# apt-get install gawk Reading package lists... Done Building dependency tree Reading state information... Done ... edited ... Fetched 1001 kB in 2s (444 kB/s) debconf: delaying package configuration, since apt-utils is not installed ... edited output down... Setting up gawk (1:4.0.1+dfsg-2.1) ... 

它看起来像你试图在一个单独的容器中运行每个命令(每当你做docker run...新的容器docker run... ),所以基本上你开始一个容器(如A )和更新apt,然后运行一个全新的容器(例如B ),并进行apt-get installB不知道A 答案是根据所需的原始图像创build一个新的Dockerfile,其中附加命令为RUN指令,例如:

 FROM python:2.7.12-wheezy RUN \ apt-get update && apt-get install \ gawk && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* 

然后做docker build -t my-new-wheezy-base . 并使用它作为你的新形象( FROM my-new-wheezy-base等…)。

看起来像你的错误是从这个评论添加到你的apt源:

(尝试回声''/ etc / apt / sources.list,它没有返回这样的文件。)

如果你像这样运行:

 docker run some-image echo '<src>'>>/etc/apt/sources.list 

这将尝试写入您的主机上的/etc/apt/sources.list(运行docker的shell捕获>>并尝试写入docker命令的输出。有多种方法可以输出到文件里面包括交互地运行它,或者逃脱shell字符并用eval处理行。

 docker run some-image /bin/sh -c eval echo '<src>'\>\>/etc/apt/sources.list