Docker 构建过程中看似完美安装的程序不存在于 运行 容器中

Programs that appear to install perfectly during a Docker build are not present in run containers

我有一个 docker 文件似乎可以成功安装各种程序。

这里以我安装sfdx-cli为例:

RUN wget -O - https://developer.salesforce.com/media/salesforce-cli/sfdx-linux-amd64.tar.xz  | tar Jxv &&     sfdx/install &&     rm -rf sfdx

我知道它是成功的,因为后续行会导致它自行更新。

这是另一个示例,我在其中安装了 apt-transport-https:

RUN apt-get install -y apt-transport-https

我知道这是可行的,因为下一行安装了 heroku,它依赖于 apt-transport-https:

RUN apt-get update && apt-get install -y heroku

但是,当我 运行 基于此图像的容器时,sfdx-cli 和 apt-transport-https 都不存在。我使用 "find /" 命令进行了搜索,但在任何地方都找不到它们,更不用说在预期的位置了。

容器总体上 运行 很好,有许多程序存在并且正在运行。 "heroku" 命令,例如,工作正常。

我显然遗漏了一些关于 docker 工作方式的基本知识,但我在网上找不到任何相关信息。

这是当前的 Dockerfile:https://gist.github.com/alexed1/ad4917f53bed34318e1aa2801a82e911

这是我的构建命令:

docker build . -t alexed1:dev5

这是我的 运行 命令:

docker run -it -v /Users/aedelstein/Dropbox/dev:/home/alexed/dev \
   -p 8000:8000 -p 5000:5000 -p 80:80 -p 1717:1717 alexed1/dev5

图像名称由 repository:tag 两部分组成。如果未指定 :tag,则默认为 :latest

容器 运行 正在使用图像 alexed1/dev5。这等同于标签 alexed1/dev5:latest

正在构建的图像不同,正在标记 alexed1:dev5

要运行构建的镜像,使用

docker run -it -v /Users/aedelstein/Dropbox/dev:/home/alexed/dev \
  -p 8000:8000 -p 5000:5000 -p 80:80 -p 1717:1717 alexed1:dev5