Точка входа в Docker использует кэшированное изображение - PullRequest
0 голосов
/ 25 февраля 2019

По какой-то причине 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
...