使用Docker在Ubuntu镜像中安装库

5

我正在尝试在我的ubuntu:14.04镜像中安装'sl'软件包。这是我的Dockerfile的内容:

FROM ubuntu:14.04
MAINTAINER xyz <xyz@gmail.com>
RUN echo 'Going to install sl now'
RUN apt-get install -y sl

这是我用来构建镜像的命令:

sudo docker build -t xyz/ubuntu:14.04 .

但是我收到了这个错误信息:
Sending build context to Docker daemon 2.048 kB
Sending build context to Docker daemon 
Step 0 : FROM ubuntu:14.04
 ---> d0955f21bf24
Step 1 : MAINTAINER xyz <xyz@gmail.com>
 ---> Using cache
 ---> a6e08926e788
Step 2 : RUN echo 'Going to install sl now'
 ---> Using cache
 ---> 1bf0bc6b3092
Step 3 : RUN apt-get install -y sl
 ---> Running in f7e57167443f
Reading package lists...
Building dependency tree...
Reading state information...
E: Unable to locate package sl
INFO[0004] The command [/bin/sh -c apt-get install -y sl] returned a non-zero code: 100 

我哪里做错了?

2个回答

6
您需要运行apt-get update,例如:
RUN apt-get update && apt-get install -y sl

您还可以整理自己的文件以节省一些磁盘空间:

RUN apt-get update && apt-get install -y sl && rm -r /var/lib/apt/lists/*

谢谢,它有效了。但是你能解释一下最后一个命令吗?为什么要删除这些列表? - gonephishing
正如我所说,“为了节省一点磁盘空间”。我们不再需要它们,因此它们只是无端地使图像变得臃肿。 - Adrian Mouat
它不会自动删除,因为当我尝试在同一镜像上运行另一个Dockerfile以安装'tree'软件包时,直到我添加了apt-get update部分,它才给出相同的错误。 - gonephishing
不会被删除。你不必这样做。 - Adrian Mouat

1

在安装其他软件包之前,您需要更新本地Ubuntu仓库中的索引。正确的方法如下:

RUN apt-get update
RUN apt-get install -y <package-name>

如Adrian在他的回答中提到的,删除已下载的列表可以用于节省磁盘空间。当您将镜像推回到中心时,这尤其有帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接