Dockerfile手动安装多个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”确实存在。 实际上,它与我构build的Dockerfile在同一个目录中。

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

编辑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 。查看编写Docker文件的最佳实践以获取更多信息。

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

Interesting Posts