出于某种原因,我的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