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