理解CMD和ENTRYPOINT是如何交互的
CMD和ENTRYPOINT指令定义了容器运行时应该执行什么命令。有一些规则描述了它们彼此之间的协作。
Dockerfile中至少应该指定一个CMD或者ENTRYPOINT命令
当将容器作为可执行命令运行时,需要一个ENTRYPOINT
CMD应该作为定义ENTRYPOINT默认参数的一种方式或者在容器中作为一个ad-hoc命令。
在运行带有替代参数的容器时,CMD将被覆盖。
下面的表列出了针对不同的ENTRYPOINT/CMD组合所执行的命令:
No ENTRYPOINT
ENTRYPOINT exec_entry p1_entry
ENTRYPOINT [“exec_entry”, “p1_entry”]
No CMD
error, not allowed
/bin/sh -c exec_entry p1_entry
exec_entry p1_entry
CMD [“exec_cmd”, “p1_cmd”]
exec_cmd p1_cmd
/bin/sh -c exec_entry p1_entry
exec_entry p1_entry exec_cmd p1_cmd
CMD [“p1_cmd”, “p2_cmd”]
p1_cmd p2_cmd
/bin/sh -c exec_entry p1_entry
exec_entry p1_entry p1_cmd p2_cmd
CMD exec_cmd p1_cmd
/bin/sh -c exec_cmd p1_cmd
/bin/sh -c exec_entry p1_entry
exec_entry p1_entry /bin/sh -c exec_cmd p1_cmd
NOTE:
如果CMD是在基础镜像中定义的,设置ENTRYPOINT将重置CMD为空值。在这种情形下,CMD在当前的镜像中必须拥有一个值。
Last updated