Выполнить команды для создания нового контейнера Docker

Можно ли добавить такие инструкции, как RUN в Dockerfile, которые вместо запуска по команде docker build будут выполняться при создании нового контейнера с помощью docker run? Я думаю, что это может быть полезно для инициализации тома, подключенного к файловой системе хоста.


person Tasso Evangelista    schedule 15.02.2015    source источник
comment
К сведению: новый контейнер можно создать с помощью docker run, но его также можно создать с помощью docker create. Насколько я знаю, нет команды, которую можно запустить, когда запускается только docker create.   -  person kojiro    schedule 15.02.2015


Ответы (2)


Взгляните на команду ENTRYPOINT. Это указывает команду для запуска при запуске контейнера, независимо от того, что кто-то вводит в качестве команды в командной строке docker run. На самом деле работа сценария ENTRYPOINT состоит в том, чтобы интерпретировать любую команду, переданную docker run.

person larsks    schedule 15.02.2015
comment
Сценарий ENTRYPOINT будет выполняться на docker start, но вы можете легко включить в сценарий логику, чтобы он мог проверить, выполнялся ли он ранее. - person larsks; 15.02.2015
comment
Хотя я не думаю, что это хороший способ сделать это, это проблема Docker. 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-шаблон/

person GayleDDS    schedule 15.02.2015
comment
У использования CMD есть обратная сторона: Dockerfile их может быть много, но будет работать только последний. - person Tasso Evangelista; 15.02.2015