Docker容器无法找到Zip包?

时间:2017-01-14 14:38:55

标签: docker

所有Ubuntu wiley存储库都添加到我的Dockerfile中,即mainuniverse等,并存在于我的docker镜像中。但是,以下Dockerfile中的apt-get install无法找到任何ZIP / UnZIP包。错误记录到最后。

如何安装这些常见的zip包?至少p7zip-fullrar

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

2 个答案:

答案 0 :(得分:4)

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

FROM ubuntu:15.10
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 -y p7zip \
    p7zip-full \
    unace \
    zip \
    unzip \
    xz-utils \
    sharutils \
    uudeview \
    mpack \
    arj \
    cabextract \
    file-roller \
    && rm -rf /var/lib/apt/lists/*

CMD ["bash"]

它可以正常安装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

答案 1 :(得分:0)

根据 Docker 最佳实践

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

  • 使用 apt-get 更新并在单层中安装
  • 避免使用 apt-get 升级

https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#leverage-build-cache

<块引用>

Docker 将初始指令和修改指令视为相同且 重用前面步骤中的缓存。结果 apt-get 更新 未执行,因为构建使用缓存版本。因为 apt-get update 未运行,您的构建可能会过时 curl 和 nginx 包的版本。

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

<块引用>

避免 RUN 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"]