Dockerfile手动安装多个deb文件

时间:2015-02-11 14:30:39

标签: docker ubuntu-14.04 deb

使用Docker,我几乎注意到“RUN”命令以apt-get upgrade&& apt-get install等。

如果您没有互联网访问权限,只想进行“dpkg -i ./deb-directory/*.deb”,该怎么办?

嗯,我试过了,但我一直都失败了。任何建议将不胜感激:

  dpkg: error processing archive ./deb-directory/*.deb (--install):
  cannot access archive: No such file or directory
 Errors were encountered while processing: ./deb-directory/*.deb
 INFO[0002] The command [/bin/sh -c dpkg -i ./deb-directory/*.deb] returned a non-zero code: 1`

澄清一下,是的,目录“deb-directory”确实存在。实际上它与我构建的Dockerfile位于同一目录中。

1 个答案:

答案 0 :(得分:5)

这可能是一个错误,我会在他们的github上打开一张票来知道。 编辑:我做了here

<强> EDIT2: 有人在github问题上回答了更好的方法。

  

*是一个shell元字符。您需要调用一个shell才能进行扩展。

     

docker run somecontainer sh -c 'dpkg -i /debdir/*.deb'

<强> !!!忘记以下内容但我将其留在这里以跟踪我的反思步骤!!!

问题来自*语句,它似乎与docker run dpkg命令无关。我在容器内尝试了你的命令(使用交互式shell)并且运行良好。看起来dpkg正在尝试安装所谓的./deb-directory/*.deb文件,该文件不存在而不是安装其中包含的所有.deb文件。

我刚刚实施了一种解决方法。将.sh脚本复制到容器chmod +x中,然后将其用作命令。 (仅供参考,在文件未被远程复制时,请使用COPY而不是ADD。请查看the best practices for writing Dockerfiles以获取更多信息。)

这是我的Dockerfile,例如:

FROM debian:latest
MAINTAINER Vrakfall <jeremy@artphotolaurent.be>

COPY install.sh /
#debdir is a directory
COPY debdir /debdir
RUN chmod +x /install.sh

CMD ["/install.sh"]

install.sh(在根目录下复制)只包含:

#!/bin/bash
dpkg -i /debdir/*.deb

以下

docker build -t debiantest .
docker run debiantest

运行良好并安装/debdir目录中包含的所有软件包。