2015-02-11 125 views
2

与码头工人的工作和我注意到几乎随处可见用“运行”命令启动apt-get的升级& &的apt-get安装等Dockerfile手动安装多个DEB的文件

,如果你没有什么互联网访问,而只是想做一个“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在同一个目录中。

+2

请发布您的Dockerfile,也许您需要* ADD * deb文件? – svenhornberg 2015-02-11 14:38:40

+0

这不是一个理想的解决方案,如果我要安装85个deb文件,是否需要添加85次? – user3614014 2015-02-11 16:00:43

+2

ADD还可以复制一个目录不仅仅是文件,所以你不需要复制85个文件。但无论如何,如果您发布Dockerfile或像Ubuntu和一个deb文件这样的简单示例,它会更容易,所以有人/我们可以重现并从错误中学习。 – svenhornberg 2015-02-11 16:17:21

回答

3

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

编辑2: 有人回答了在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 <[email protected]> 

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目录中包含的所有软件包。