Docker容器无法定位Zip包?

Docker容器无法定位Zip包?,docker,Docker,所有Ubuntu wiley存储库都添加到我的docker文件中,即main,universe,等等,并出现在我的docker图像中。但是,以下Dockerfile中的apt get install无法找到任何ZIP/UnZIP包。最后是错误日志 如何安装这些常见的zip软件包?至少p7zip完整和rar Dockerfile FROM ubuntu:15.10 CMD ["bash"] RUN add-apt-repository main && \ add-apt-r

所有Ubuntu wiley存储库都添加到我的docker文件中,即
main
universe
,等等,并出现在我的docker图像中。但是,以下Dockerfile中的apt get install无法找到任何ZIP/UnZIP包。最后是错误日志

如何安装这些常见的zip软件包?至少
p7zip完整
rar

Dockerfile

FROM ubuntu:15.10
CMD ["bash"]
RUN add-apt-repository main && \
    add-apt-repository universe && \
    add-apt-repository restricted && \
    add-apt-repository multiverse
RUN  apt-get update -y && \
     apt-get upgrade -y && \
     apt-get dist-upgrade -y && \
     apt-get -y autoremove && \
     apt-get clean
RUN apt-get install p7zip \
    p7zip-full \
    p7zip-rar \
    unace \
    unrar \
    zip \
    unzip \
    xz-utils \
    sharutils \
    rar \
    uudeview \
    mpack \
    arj \
    cabextract \
    file-roller \
    && rm -rf /var/lib/apt/lists/*
抛出错误

E: Unable to locate package p7zip-full
E: Unable to locate package unace
E: Unable to locate package unrar
E: Unable to locate package zip
E: Unable to locate package unzip
E: Unable to locate package sharutils
E: Unable to locate package rar
E: Unable to locate package uudeview
E: Unable to locate package mpack
E: Unable to locate package arj
E: Unable to locate package cabextract
E: Unable to locate package file-roller

尝试使用此
Dockerfile
(您的Dockerfile没有我在之前的评论中告诉您的内容):

它可以工作,并安装zip和p7zip

$ docker build -t mytest .
$ docker run -d -ti --name mytest mytest /bin/bash
$ docker exec -ti mytest /bin/bash

 root@f01fc3456a2a:/# zip 
 root@f01fc3456a2a:/# p7zip

根据Docker最佳实践

@gile的答案可以通过以下方式改进:

  • 在单个层中使用apt get update和install
  • 避过 升级

Docker认为初始指令和修改后的指令是相同的 重用前面步骤中的缓存。因此,apt将获得更新 未执行,因为生成使用缓存版本。因为 apt get update未运行,您的生成可能会获得过时的 curl和nginx包的版本

使用RUN-apt-get-update&&apt-get-install-y确保您的Dockerfile 安装最新的软件包版本,无需进一步编码或手动操作 干预。这种技术被称为“缓存破坏”。你也可以 通过指定包版本实现缓存破坏。这是众所周知的 作为版本钉扎

避免运行apt-get-upgrade和dist-upgrade,因为这是许多“必要的” 父映像中的包无法在非特权映像中升级 容器。如果父映像中包含的包已过期, 联系其维护人员。如果你知道有一个特别的包裹, 需要更新的foo,请使用apt get install-y foo进行更新 自动地

这应该与@gile的答案相同,并应用了这些最佳实践

FROM ubuntu:15.10
RUN  apt-get -y update \
     && apt-get -y autoremove \
     && apt-get clean \
     && apt-get install -y p7zip \
     p7zip-full \
     unace \
     zip \
     unzip \
     xz-utils \
     sharutils \
     uudeview \
     mpack \
     arj \
     cabextract \
     file-roller \
     && rm -rf /var/lib/apt/lists/*

CMD ["bash"]

我很惊讶你能走那么远。据我所知,ubuntu:15.10映像没有添加apt存储库的
命令。尝试删除关于“添加apt存储库”和关于p7zip rar、UNRR、rar的行,因为它们在ubuntu:15.10中没有安装候选程序。这样你就可以用你列出的其他压缩包来构建图像。我添加了
apt-apt-repository
,并做了一些调整。我丢失了Ubuntu wiley的p7zip的ppa seach链接。但是接下来需要知道如何在dockerfile中安装
p7zip
zip软件包
——谢谢格式说明:Github的三重反勾标记在这里不起作用。要格式化代码,只需缩进4个空格即可。我整理了一下这篇文章。谢谢你分享我的技术诀窍。嗯,所以我的问题是别的。这就是为什么仅仅通过添加
-qq
它就可以工作的原因?我不再在提供的链接中看到这些信息
FROM ubuntu:15.10
RUN  apt-get -y update \
     && apt-get -y autoremove \
     && apt-get clean \
     && apt-get install -y p7zip \
     p7zip-full \
     unace \
     zip \
     unzip \
     xz-utils \
     sharutils \
     uudeview \
     mpack \
     arj \
     cabextract \
     file-roller \
     && rm -rf /var/lib/apt/lists/*

CMD ["bash"]