Можно ли добавить инструкции, например RUN
, в Dockerfile
, чтобы вместо запуска команды docker build
выполнить, когда новый контейнер создан с docker run
? Я думаю, что это может быть полезно для инициализации тома, прикрепленного к файловой системе хоста.Выполнить команды для создания нового контейнера Docker
ответ
Посмотрите на команду ENTRYPOINT. Это указывает команду для запуска при запуске контейнера, независимо от того, что кто-то предоставляет в командной строке docker run
. Фактически, работа скрипта ENTRYPOINT
интерпретирует любую команду, переданную docker run
.
«Запуск docker» не будет повторно запускать команду «ENTRYPOINT»? –
Скрипт 'ENTRYPOINT' будет запускаться на' docker start', но вы можете легко включить в скрипт логику, чтобы она могла проверить, была ли она ранее выполнена. – larsks
Хотя я не думаю, что это хороший способ сделать это, это проблема Докера. «ENTRYPOINT», похоже, является надлежащим обходным решением. –
Я думаю, что вы ищете CMD
https://docs.docker.com/reference/builder/#cmd
Основной целью в
CMD
является обеспечение по умолчанию для выполняющегося контейнера. Эти значения по умолчанию могут включать в себя исполняемый файл, или они могут пропустить исполняемый файл, и в этом случае вы должны указать команду .Примечание: не путать
RUN
сCMD
.RUN
фактически выполняет команду, и фиксирует результат;CMD
ничего не выполняет во время сборки, но определяет заданную команду для изображения.
Вы также должны изучить использование контейнеров данных, чтобы увидеть это превосходное сообщение в блоге.
Стойких тома с Докерами - только данные контейнера модель http://container42.com/2013/12/16/persistent-volumes-with-docker-container-as-volume-pattern/
Существует недостаток с использованием 'CMD':' Dockerfile' может иметь много из них, но будет работать только последний. –
FYI - Новый контейнер может быть создан с 'DOCKER run', но он также может быть создан с' DOCKER create'. AFAIK нет команды, которую можно запустить, когда запускается только 'docker create'. – kojiro