所有Ubuntu存储库都添加到我的Dockerfile中,即main、universe等,并显示在我的坞映像中。但是,下面的Dockerfile中的apt-get install无法找到任何ZIP/UnZIP包。最后记录错误。
如何安装这些普通的压缩包?至少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发布于 2017-01-14 17:04:25
尝试使用这个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发布于 2021-02-23 16:38:40
根据Docker最佳做法
@gile的回答可以通过以下方式得到改进:
best-practices/#leverage-build-cache
Docker将初始指令和修改后的指令视为相同的指令,并重用前面步骤中的缓存。因此,apt-get更新不会执行,因为构建使用缓存的版本。因为apt-get更新没有运行,所以您的构建可能会得到curl和nginx包的过时版本。 使用RUN apt-get update && apt-get安装-y可以确保您的Dockerfile安装最新的软件包版本,而不需要进一步的编码或手动干预。这种技术被称为“缓存破坏”。您还可以通过指定包版本来实现高速缓存破坏。这被称为版本定位,避免运行apt-get升级和dist-升级,因为许多来自父映像的“基本”包不能在非特权容器中升级。如果父映像中包含的包已过期,请与其维护人员联系.如果您知道有一个特定的包foo需要更新,请使用apt安装-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"]*编辑
已重新安排了Docker最佳做法文档。
建议仍然是一样的。虽然上面的链接所锚定的文档部分现在只是暗示了构建缓存和apt-get之间的关系.
他们增加了专门讨论这一主题的新的文档部分。
简言之:
始终将运行apt-get更新与相同RUN语句中的apt-get安装结合在一起。
https://stackoverflow.com/questions/41651145
复制相似问题