我是Docker的新手,对ockfile有一个简单的问题。我们可以在停靠文件中写入入口点和CMD。似乎在创建容器期间执行了入口点。并且在启动容器期间执行CMD。这是真的?
不完全是:
ENTRYPOINT
配置将作为可执行文件运行的容器。
因此它 总是 执行的(或者默认/bin/sh -c
是)。
ENTRYPOINT ["executable", "param1", "param2"] (exec form, preferred)
ENTRYPOINT command param1 param2 (shell form)
命令行参数to
docker run <image>
将以exec形式附加在所有元素之后ENTRYPOINT
,并将覆盖使用CMD指定的所有元素。shell形式阻止使用任何
CMD
或运行命令行参数,但是具有以下缺点:您ENTRYPOINT
将作为的子命令启动,该子命令/bin/sh -c
不会传递信号。
这意味着可执行文件将不是容器的PID 1,并且将不会接收Unix信号,因此您的可执行文件将不会从接收到SIGTERMdocker stop <container>
。
您可以将其CMD
作为参数查看ENTRYPOINT
。
如果没有入口点(默认命令为“ /bin/sh -c
”),则CMD
可以包含可执行文件。
如果ENTRYPOINT
已经运行了可执行文件,则CMD参数是该命令的参数(如果docker run
使用时不带附加参数)。
随着docker start
,如中提到的问题1437时,ENTRYPOINT
被执行,但只有从参数CMD
(所以CMD
被使用,但你不能用你自己的命令行参数覆盖它)。
如果你想使用CMD,你需要docker run
,没有docker start
。
实际上,最近有一个正在进行的PR(PR
19746),它允许docker
start命令使用可选的--cmd
(-c
)标志来指定要使用的cmd,而不是来自cmd / entrypoint的默认cmd。
该官方Dockerfile文档现在有一个部分“
了解如何CMD和入口点互动 ”:
- Dockerfile应该至少指定
CMD
或ENTRYPOINT
命令之一。ENTRYPOINT
使用容器作为可执行文件时应定义。CMD
应该用作ENTRYPOINT
在容器中定义命令或执行临时命令的默认参数的方式。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"]
手段exec_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
问题内容: 我对何时应该使用vs 感到困惑。例如,要执行bash / shell命令(即),我将始终使用它,或者是否存在我会使用的情况?试图了解有关这两个类似指令的最佳实践。 问题答案: RUN是映像构建步骤,命令后将容器的状态提交到容器映像。一个Dockerfile可以有很多步骤相互叠加以构建映像。 CMD是启动构建映像时容器默认执行的命令。Dockerfile将仅使用最终定义的。使用启动容器时
我很困惑什么时候应该使用和。例如,要执行bash/shell命令(即),我将始终使用,或者是否存在使用的情况?试图理解关于这两个类似的指令的最佳实践。
本文向大家介绍Java中Runnable和Callable接口之间的区别,包括了Java中Runnable和Callable接口之间的区别的使用技巧和注意事项,需要的朋友参考一下 可运行和可调用两个功能接口。实现这些接口的类设计为由另一个线程执行。 可以使用Ruunable启动线程,这是启动新线程的两种方法:一种是通过子类化Thread类,另一种是实现Runnable接口。 线程类没有可调用的构造
有人能解释一下GraalVM和Jvm热点之间的区别,以及GraalVM与OpenJDK热点的关系吗。
问题内容: Python中的抽象类和接口有什么区别? 问题答案: 有时您会看到以下内容: 因为Python没有(也不需要)正式的Interface协定,所以抽象和接口之间不存在Java风格的区别。如果有人努力定义一个正式的接口,它也将是一个抽象类。唯一的区别在于文档字符串中所述的意图。 当您进行鸭类输入时,抽象和接口之间的区别是令人不解的事情。 Java使用接口是因为它没有多重继承。 由于Pyth
问题内容: 我是新来的春天,具有hibernate的工作知识。我的工作是通过使用Spring声明式方法来实现交易。由于Google的帮助,我成功地在Google的帮助下完成了交易。但是无法清楚地了解我在application- context.xml中使用的术语。 1。 有人可以向我解释以上几点,与此同时,我也试图从google上了解它。 问题答案: 您已经成功实施了, 在我们可以通过三种方式实现