使用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”确实存在。实际上它与我构建的Dockerfile位于同一目录中。
答案 0 :(得分:5)
这可能是一个错误,我会在他们的github上打开一张票来知道。 编辑:我做了here。
<强> 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
。请查看the best practices for writing 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"]
install.sh
(在根目录下复制)只包含:
#!/bin/bash
dpkg -i /debdir/*.deb
以下
docker build -t debiantest .
docker run debiantest
运行良好并安装/debdir
目录中包含的所有软件包。