use*_*014 7 deb docker ubuntu-14.04
使用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`
Run Code Online (Sandbox Code Playgroud)
澄清一下,是的,目录"deb-directory"确实存在.实际上它与我构建的Dockerfile位于同一目录中.
这可能是一个错误,我会在他们的github上打开一张票来知道. 编辑:我在这里做到了.
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不是远程复制文件.请查看编写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"]
Run Code Online (Sandbox Code Playgroud)
的install.sh(在根目录复制)简单包含:
#!/bin/bash
dpkg -i /debdir/*.deb
Run Code Online (Sandbox Code Playgroud)
以下
docker build -t debiantest .
docker run debiantest
Run Code Online (Sandbox Code Playgroud)
运行良好,并安装/debdir目录中包含的所有包.