在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 install
。 B
不知道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