更新 docker 中的包是否可行?

Is updating a package inside a docker the way to go?

我最近一直在摆弄 Docker 并尝试这个 image。我刚刚了解了什么是 ENTRYPOINT 以及 Docker 的几个新命令,但后来我想:如果我想更新该图像的 NMAP 版本怎么办?我继续尝试 apt 的东西,然后我意识到它是在 Alpine 上构建的,wchich 使用 apk 并发现它没有安装,我不知道为什么。

也许这张图片的所有者删除了它?如果是这样,我应该能够对安装的软件包执行更新,还是图像维护者的任务?

从您分享的 dockerfile 图像中可以看出,它以高山 linux 图像作为基础图像,并且没有任何 apk 的删除步骤。它还在 docker 文件的开头有两个参数,然后用于在该映像中安装 nmap:

ARG nmap_ver=7.91

ARG build_rev=4

这意味着您可以下载此 Dockerfile,在本地将此 Dockerfile 中的版本更改为您想要的版本,然后构建镜像:

docker build -t nmap_myversion .

然后 运行 一个包含您自己的图像的容器:

docker run -d --name my_nmap nmap_myversion

回答您的问题,在已创建的映像中更新软件不是一个好方法,因为它会在您的 docker 容器中创建一个新层,该层将在容器删除后丢失。 最好的选择是在图像中完成此操作。很好的例子是这个 nmap 图像是如何创建的(参见上面的 Dockerfile)