Я новичок в докере, имеет простой вопрос к файлу док-станции. Мы можем записать точку входа и CMD в файл док-станции. Кажется, что точка входа выполняется во время создания контейнера. И CMD выполняется во время запуска контейнера. Это правда?Разница между cmd и точкой входа в док-файл
ответ
Не совсем:
ENTRYPOINT
настраивает контейнер, который будет работать в качестве исполняемого файла.
Так что это всегда выполнен (или по умолчанию /bin/sh -c
есть).
ENTRYPOINT ["executable", "param1", "param2"] (exec form, preferred)
ENTRYPOINT command param1 param2 (shell form)
командной строки аргументы
docker run <image>
будут добавлены после того, как все элементы в качестве ехес формеENTRYPOINT
, и будет переопределить все элементы, указанные с помощью CMD.Форма оболочки предотвращает любые
CMD
или командную строку запуска аргументов не использовался, но имеет тот недостаток, что вашENTRYPOINT
будет запущен как субкоманда/bin/sh -c
, который не пропускает сигналы.
Это означает, что исполняемый файл не будет PID 1 контейнера и не получит сигналы Unix, поэтому ваш исполняемый файл не получит SIGTERM отdocker stop <container>
.
Вы можете посмотреть CMD
в качестве параметров для ENTRYPOINT
.
если нет точки входа (команда по умолчанию - «/bin/sh -c
»), CMD
может включать исполняемый файл.
Если ENTRYPOINT
уже запускает исполняемый файл, то аргументы CMD являются параметрами для этой команды (если docker run
используется без дополнительных параметров).
С docker start
, как указано в issue 1437, то ENTRYPOINT
выполняется, но только с параметрами из CMD
(так используется CMD
, но вы не можете изменить его параметры самостоятельно в командной строке).
Если вы хотите использовать CMD, вам нужно docker run
, а не docker start
.
Там на самом деле недавний PR в действии (PR 19746), который позволяет докер команду запуска, чтобы взять дополнительный --cmd
(-c
) флаг, чтобы указать ЦМД использовать вместо стандартного одного из CMD/EntryPoint.
The Official Dockerfile documentation теперь имеет раздел "Understand how CMD and ENTRYPOINT interact":
- Dockerfile следует указать, по крайней мере один из
CMD
илиENTRYPOINT
команд.ENTRYPOINT
должен быть определен при использовании контейнера в качестве исполняемого файла.CMD
следует использовать как способ определения аргументов по умолчанию для командыENTRYPOINT
или для выполнения команды ad-hoc в контейнере.CMD
будет отменен при запуске контейнера с альтернативными аргументами.
Это означает, что если ваш Dockerfile не включает в себя:
Нет
неCMD
:
- если нет
ENTRYPOINT
: ошибка, не допускаетсяENTRYPOINT exec_entry p1_entry
означает/bin/sh -c exec_entry p1_entry
ENTRYPOINT ["exec_entry", "p1_entry"]
означаетexec_entry p1_entry
CMD ["exec_cmd", "p1_cmd"]
(одна команда, один параметр)
- если нет
ENTRYPOINT
:exec_cmd p1_cmd
,ENTRYPOINT exec_entry p1_entry
означает/bin/sh -c exec_entry p1_entry exec_cmd p1_cmd
ENTRYPOINT ["exec_entry", "p1_entry"]
среднее sexec_entry p1_entry exec_cmd p1_cmd
CMD ["p1_cmd", "p2_cmd"]
- если нет
ENTRYPOINT
:p1_cmd p2_cmd
ENTRYPOINT exec_entry p1_entry
означает/bin/sh -c exec_entry p1_entry p1_cmd p2_cmd
(хорошо)ENTRYPOINT [“exec_entry”, “p1_entry”]
означаетexec_entry p1_entry p1_cmd p2_cmd
CMD exec_cmd p1_cmd
:
- если нет
ENTRYPOINT
:/bin/sh -c exec_cmd p1_cmd
ENTRYPOINT exec_entry p1_entry
означает/bin/sh -c exec_entry p1_entry /bin/sh -c exec_cmd p1_cmd
ENTRYPOINT [“exec_entry”, “p1_entry”]
означаетexec_entry p1_entry /bin/sh -c exec_cmd p1_cmd
- 1. Разница между точкой и пробелом в Scala
- 2. Разница между вершиной и точкой в vtk
- 3. VTKCamera разница между фокальной точкой и позицией
- 4. Разница между использованием скобки (`[]`) и точкой (`.`) нотация
- 5. Разница между контроллером пружины и конечной точкой
- 6. Разница между конечной точкой, скелетом и слугой?
- 7. Xcode: разница между BACKSPACE + CMD и BACKSPACE?
- 8. Разница между «sh -c cmd» и просто «cmd»?
- 9. Разница между точкой и запятой в стоимостном значении в php
- 10. Разница между синхронизацией и блокировкой повторного входа?
- 11. ElasticCache - В чем разница между конфигурацией и конечной точкой узла?
- 12. В чем разница между ресурсом и конечной точкой?
- 13. разница между двойной точкой «..» и/шляпой каретки символом „^“ в мерзавце
- 14. В чем разница между конечной точкой UDP и UDP-клиентом?
- 15. Разница между конечной точкой и коннектором в муле
- 16. В чем разница между точкой опоры на подозреваемый и подозреваемыми?
- 17. В чем разница между cmd и idle при использовании tqdm?
- 18. В чем разница между командной строкой и cmd?
- 19. разница между разговором и Cmd/с в окнах партии
- 20. Разница между «:» и «.» В PHP?
- 21. Разница между Thread.sleep() и точкой останова (Suspend Thread)
- 22. Cocos2D-iphone: Разница между точкой привязки и позицией
- 23. Разница между точкой замерзания конда и списком конда
- 24. AngularJS $ Inject - разница между точкой и кронштейн Accessor
- 25. Обработка с фиксированной точкой: какая разница между uint16_t и uint_fast16_t?
- 26. разница между десятичным числом с запятой и точкой Javascript
- 27. В чем разница между двойной точкой и тройной точкой для git log
- 28. В чем разница между точкой останова с аргументом для условия и точкой разрыва условия?
- 29. Разница Java между бежит от netbeans и cmd
- 30. Разница между сценариями Unix/cmd и скриптами python
Возможный дубликат из [В чем разница между CMD и ENTRYPOINT в файле Docker?] (http://stackoverflow.com/questions/21553353/what-is-the-difference-between-cmd-and-entrypoint-in-a-dockerfile) – Auzias