Можно ли добавить такие инструкции, как RUN
в Dockerfile
, которые вместо запуска по команде docker build
будут выполняться при создании нового контейнера с помощью docker run
? Я думаю, что это может быть полезно для инициализации тома, подключенного к файловой системе хоста.
Выполнить команды для создания нового контейнера Docker
Ответы (2)
Взгляните на команду ENTRYPOINT. Это указывает команду для запуска при запуске контейнера, независимо от того, что кто-то вводит в качестве команды в командной строке docker run
. На самом деле работа сценария ENTRYPOINT
состоит в том, чтобы интерпретировать любую команду, переданную docker run
.
ENTRYPOINT
будет выполняться на docker start
, но вы можете легко включить в сценарий логику, чтобы он мог проверить, выполнялся ли он ранее.
- person larsks; 15.02.2015
ENTRYPOINT
кажется правильным обходным путем.
- person Tasso Evangelista; 16.02.2015
Я думаю, вы ищете CMD
https://docs.docker.com/reference/builder/#cmd
Основная цель
CMD
— предоставить значения по умолчанию для исполняемого контейнера. Эти значения по умолчанию могут включать исполняемый файл или исключать исполняемый файл, и в этом случае вы также должны указать инструкциюENTRYPOINT
.Примечание. не путайте
RUN
сCMD
.RUN
фактически запускает команду и фиксирует результат;CMD
ничего не выполняет во время сборки, но указывает предполагаемую команду для образа.
Вы также должны изучить использование контейнеров данных, см. этот отличный пост в блоге.
Постоянные тома с Docker — шаблон контейнера только для данных http://container42.com/2013/12/16/persistent-volumes-with-docker-container-as-volume-шаблон/
CMD
есть обратная сторона: Dockerfile
их может быть много, но будет работать только последний.
- person Tasso Evangelista; 15.02.2015
docker run
, но его также можно создать с помощьюdocker create
. Насколько я знаю, нет команды, которую можно запустить, когда запускается толькоdocker create
. - person kojiro   schedule 15.02.2015