Подтвердить что ты не робот

Docker Commit Создал изображения и ENTRYPOINT

Как вы гарантируете, что исходный CMD, указанный в вашем файле Docker, по-прежнему настроен на запуск на docker run, когда вы вносите изменения через docker commit?

Здесь последовательность событий, чтобы сделать ее немного яснее:

  • Создать образ с Dockerfile
  • Запустить контейнер из образа с помощью -ti --entrypoint /bin/bash в какой-то момент, чтобы внести некоторые изменения.
  • Внесите изменения внутри контейнера и запустите docker commit, чтобы создать новое изображение, с новым тегом
  • При запуске нового изображения исходная запись CMD из исходного файла Docker больше не выполняется

Итак, я спрашиваю; как вы reset CMD из файла Docker снова на зафиксированном изображении?

4b9b3361

Ответ 1

Вы должны создать файл Docker для установки CMD или ENTRYPOINT. Просто установите Dockerfile на идентификатор изображения, возвращенный docker commit. Например, учитывая это:

$ docker commit $(docker ps -lq)
69e9c08825508ec780efc86268a05ffdf4edae0999a2424dbe36cb04c2a15d6b

Я мог бы создать файл Docker, который бы выглядел так:

FROM 69e9c08825508ec780efc86268a05ffdf4edae0999a2424dbe36cb04c2a15d6b
CMD ["/bin/bash"]

И затем используйте это для создания нового изображения:

$ docker build .
Step 0 : FROM 69e9c08825508ec780efc86268a05ffdf4edae0999a2424dbe36cb04c2a15d6b
 ---> 69e9c0882550
Step 1 : CMD /bin/bash
 ---> Running in f886c783551d
 ---> 13a0f8ea5cc5
Removing intermediate container f886c783551d
Successfully built 13a0f8ea5cc5

Тем не менее, ваш лучший способ действий, вероятно, не вносить изменения в контейнер, а затем использовать Docker commit; вы в конечном итоге получаете гораздо более проверенный набор изменений, если вы просто полагаетесь на файл Docker для внесения необходимых изменений в первую очередь.

Ответ 2

Текущие версии Docker (I'm on 1.11.1) предоставляют параметр --change, который позволяет обрабатывать изображение в режиме строки в режиме фиксации, например:

docker commit --change='ENTRYPOINT ["myEntryPoint.sh"]' $(docker ps -lq)

CMD также поддерживается, как и некоторые другие. Подробнее см. manpage.