По какой-то причине ENTRYPOINT внизу моего Dockerfile вызывает большие изменения в изображении, что, я думаю, указывает на использование недопустимого изображения из кэша.
Вот что произошло:
$ 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, он имеет версию 8.9 coq, как и ожидалось.Но окончательное изображение после ENTRYPOINT имеет версию 8.6.Это была версия coq, которую я использовал, поэтому я думаю, что она где-то кеширует.
Запуск docker build .
снова просто использовал кэшированные версии, но когда я изменил ENTRYPOINT на CMD, теперь это работает.Окончательное изображение использует Coq версии 8,9.Измените CMD обратно на ENTRYPOINT, и проблема вернется.
В случае необходимости моя версия Docker будет
$ docker --version
Docker version 18.09.2, build 6247962