所有Ubuntu wiley存储库都添加到我的Dockerfile中,即main
,universe
等,并存在于我的docker镜像中。但是,以下Dockerfile中的apt-get install
无法找到任何ZIP / UnZIP包。错误记录到最后。
如何安装这些常见的zip包?至少p7zip-full
和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
答案 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 的回答可以通过以下方式改进:
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"]