Docker入口点使用缓存的映像

时间:2019-02-25 09:46:56

标签: docker caching dockerfile docker-entrypoint

出于某种原因,我的Dockerfile底部的ENTRYPOINT导致映像发生了很大的变化,我认为这表明它使用的是来自缓存的无效映像。

发生了什么事

$ docker build --no-cache .
Sending build context to Docker daemon  49.66kB
Step 1/3 : FROM coqorg/coq:8.9
 ---> 574cdefb0e27
Step 2/3 : RUN sudo apt-get update && sudo apt-get upgrade -y &&     sudo apt-get install -y coqide
...
lots of build lines (without --no-cache it did the same thing; so then I added --no-cache but it didn't help)
...
Removing intermediate container b89576fdf1cc
 ---> 2e8367adfed1
Step 3/3 : ENTRYPOINT ["bash"]
 ---> Running in b44849519ffc
Removing intermediate container b44849519ffc
 ---> 700be9266e4a
Successfully built 700be9266e4a
$ docker run -it 700be9266e4a
coq@29ead9a74188:~$ coqc --version 
The Coq Proof Assistant, version 8.6 (December 2016)
compiled on Dec 29 2016 23:38:14 with OCaml 4.02.3
coq@29ead9a74188:~$ exit     
$ docker run -it 2e8367adfed1
coq@38b9486772ee:~$ coqc --version 
The Coq Proof Assistant, version 8.9.0 (February 2019)
compiled on Feb 7 2019 10:48:49 with OCaml 4.05.0

那么这是怎么回事?我写了一个包含三个步骤的Dockerfile。它使用coq版本8.9作为基础,然后运行一个apt-get命令,然后设置ENTRYPOINT。

当我从RUN之后运行中间映像时,它具有预期的coq版本8.9。但是来自ENTRYPOINT之后的最终图像具有coq版本8.6。这恰好是我以前使用的coq版本,所以我认为它是将其缓存在某个地方。

再次运行docker build .只是使用了缓存的版本,但是当我将ENTRYPOINT更改为CMD时,现在可以使用了。最终图像使用coq版本8.9。将CMD更改回ENTRYPOINT,问题再次出现。

如果有意义,我的Docker版本是

$ docker --version
Docker version 18.09.2, build 6247962

0 个答案:

没有答案