在使用Docker时,我注意到几乎所有地方的“RUN”命令都是以apt-get升级&& apt-get安装等开头的。
如果您没有Internet访问权限,而只是想执行“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位于同一目录中。
最佳答案
这可能是一个错误,我将在他们的github上打开一张票以了解。
编辑:我做到了here。
编辑2:
有人在github问题上回答了一种更好的方法。
!!!忘记以下内容,但我将其留在此处以跟踪我的反射步骤!!!
问题来自*
语句,该语句似乎不适用于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
目录中包含的所有软件包。关于docker - Dockerfile手动安装多个deb文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28456836/