场景:
我制作了一个可用的 dockerfile
,我想从头开始测试它们。但是,remove 命令只是暂时删除图像,这意味着再次运行构建命令将使它们重新出现,就好像它从未被删除一样。
示例:
*注意:前两张图片与本题无关。
使用 docker rmi ***_seis
命令删除了 ***_seis
图像,因此,运行 docker images
将显示 ***_seis
图像已被删除。
但是,当我运行以下构建命令时:
docker build -f dockerfile -t ***_seis:latest .
即使它在几秒钟前被删除,构建只用了不到一分钟,创建日期表明它是 3 天前制作的。
日志:
这是我的构建日志的样子:
docker build -f dockerfile -t ***_seis:latest .
[+] Building 11.3s (14/14) FINISHED
=> [internal] load build definition from dockerfile 0.0s
=> => transferring dockerfile: 38B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/jupyter/base-notebook:latest 11.2s
=> [1/9] FROM docker.io/jupyter/base-notebook:latest@sha256:bc9ad73498f21ae716ba0e58d660063eae1677f6dd2bd5b669248fd0bf22dc79 0.0s
=> [internal] load build context 0.0s
=> => transferring context: 32B 0.0s
=> CACHED [2/9] RUN apt update && apt install --no-install-recommends -y software-properties-common git zip unzip wget v 0.0s
=> CACHED [3/9] RUN conda install -c conda-forge jupyter_contrib_nbextensions jupyter_nbextensions_configurator jupyter-resource-usage 0.0s
=> CACHED [4/9] RUN mkdir /home/jovyan/environment_ymls 0.0s
=> CACHED [5/9] COPY seis.yml /home/jovyan/environment_ymls/seis.yml 0.0s
=> CACHED [6/9] RUN conda env create -f /home/jovyan/environment_ymls/seis.yml 0.0s
=> CACHED [7/9] RUN python -m ipykernel install --name seis--display-name "seis" 0.0s
=> CACHED [8/9] WORKDIR /home/jovyan/***_seis 0.0s
=> CACHED [9/9] RUN chown -R jovyan:users /home/jovyan 0.0s
=> exporting to image 0.0s
=> => exporting layers 0.0s
=> => writing image sha256:16a8e90e47c0adc1c32f28e32ad17a8bc72795c3ca9fc39e792fa383793c3bdb 0.0s
=> => naming to docker.io/library/***_seis:latest
疑难解答:到目前为止,我已经尝试了多种删除它们的方法,例如
docker rmi <image_name>
docker image prune
并从 docker 桌面手动删除。
我确保所有容器都被删除了:
docker ps -a
预期结果:如果成功,它应该从头开始重建,构建时间超过一分钟,创建日期应该反射(reflect)它实际创建的时间。
问题: 我想知道图像没有被完全删除的问题是什么。为什么它要重建过去的图像而不是开始新的构建?
预先感谢您的帮助。
最佳答案
它是从缓存中构建的。由于构建引擎的输入似乎没有发生变化,并且它具有之前构建的步骤,因此它们被重复使用,包括图像创建日期。
您可以删除构建缓存。但我建议改为运行:
docker build --pull --no-cache -f dockerfile -t ***_seis:latest .
--pull
选项可以拉取一个新的基础镜像,如果你在本地拉取了一个旧版本的话。 --no-cache
选项跳过各个步骤的缓存(特别是可能获取最新外部依赖项的 RUN 步骤)。
关于docker - 删除 Docker 镜像再次出现在新的构建命令中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72988235/