Есть ли реальный вариант использования более чем одного CMD в файле Docker? - PullRequest
0 голосов
/ 20 января 2019

Согласно doc :

В Dockerfile может быть только одна инструкция CMD.Если вы укажете более одного CMD, то вступит в силу только последний CMD.

Почему в одном списке более одной CMD инструкции?Я не очень понимаю это руководство.Похоже ли это на «взлом», потому что они не могут / не могут выполнить проверку файла Docker, чтобы пожаловаться на то, что определено более 1 инструкции CMD, или это реальный вариант использования?Т.е. есть некоторый случай, когда у нас может быть определено более 1 CMD, но мы в порядке, если выполняется только последнее (тогда почему было определено предыдущее)?
Может кто-нибудь, пожалуйста, пролить свет на это?

1 Ответ

0 голосов
/ 20 января 2019

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

Такая настройка очень разумна:

# I am "node", a node.js base image:
FROM ubuntu:18.04
RUN apt-get blah blah install nodejs
# By default on this base image just run "node"
CMD ["node"]
# I am an application-specific image based on node.js
FROM node
COPY ...
# Override that default CMD
CMD ["node", "./app.js"]

В этой настройке естьдва слоя CMD в конечном изображении, и это нормально.

Я не сразу вижу запрос функции на этот счет в https://github.com/moby/moby/issues, но, если бы я был автором Докера, это кажется разумнымдостаточно «предупреждающего» типа сообщения, и, вероятно, не так уж и сложно составить для него запрос на извлечение.(Сохраните флаг, который запоминает, если вы видели CMD; если вы видите шаг CMD, предупредите, если установлен флаг, и установите его, если нет; если вы видите шаг FROM, сбросьте флаг.)

...