`
m635674608
  • 浏览: 5027319 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Dockerfile里指定执行命令用ENTRYPOING和用CMD有何不同?

 
阅读更多

运行时机不太一样。

RUN是在Build时运行的,先于CMD和ENTRYPOINT。Build完成了,RUN也运行完成后,再运行CMD或者ENTRYPOINT。

ENTRYPOINT和CMD的不同点在于执行docker run时参数传递方式,CMD指定的命令可以被docker run传递的命令覆盖,例如,如果用CMD指定:

...
CMD ["echo"]

然后运行

docker run CONTAINER_NAME echo foo

那么CMD里指定的echo会被新指定的echo覆盖,所以最终相当于运行echo foo,所以最终打印出的结果就是:

foo

而ENTRYPOINT会把容器名后面的所有内容都当成参数传递给其指定的命令(不会对命令覆盖),比如:

...
ENTRYPOINT ["echo"]

然后运行

docker run CONTAINER_NAME echo foo

则CONTAINER_NAME后面的echo foo都作为参数传递给ENTRYPOING里指定的echo命令了,所以相当于执行了

echo "echo foo"

最终打印出的结果就是:

echo foo

另外,在Dockerfile中,ENTRYPOINT指定的参数比运行docker run时指定的参数更靠前,比如:

...
ENTRYPOINT ["echo", "foo"]

执行

docker run CONTAINER_NAME bar

相当于执行了:

echo foo bar

打印出的结果就是:

foo bar

Dockerfile中只能指定一个ENTRYPOINT,如果指定了很多,只有最后一个有效。

执行docker run命令时,也可以添加-entrypoint参数,会把指定的参数继续传递给ENTRYPOINT,例如:

...
ENTRYPOINT ["echo","foo"]

然后执行:

docker run CONTAINER_NAME bar #注意没有echo

那么,就相当于执行了echo foo bar,最终结果就是

foo bar

我在dockboard.org上翻译了一篇《15 Docker Tips in 15 Minutes》,其中有讲到RUN、CMD和ENTRYPOINT的不同,你可以参考一下。

另外有一个Docker Quicktips系列,里面有一篇也是讲ENTRYPIONT的,你可以看一下,连接在这里:
http://www.tech-d.net/2014/01/27/docker-quicktip-1-entrypoint/

这个系列的文章翻译我们马上也会添加到dockboard.org的,敬请关注一下哈。

另外这里有官方文档中对entrypoint的说明:http://docs.docker.io/en/latest/reference/builder/#entrypoint

 

http://unixman.blog.51cto.com/10163040/1677744

https://segmentfault.com/q/1010000000417103

分享到:
评论

相关推荐

    c++执行cmd命令

    c++执行cmd命令c++执行cmd命令c++执行cmd命令c++执行cmd命令c++执行cmd命令c++执行cmd命令

    C#winform执行cmd命令

    在IT领域,C#是一种广泛使用的编程语言,尤其在开发Windows桌面应用程序时,如...在VS2010中实现这个功能,开发者可以利用`System.Diagnostics.Process`类来启动和控制外部进程,从而执行CMD命令,并展示执行结果。

    vbs执行CMD命令and导出命令结果

    通过VBS可以非常方便地执行CMD命令,并且能够将这些命令的结果导出到文件中,这对于批量处理任务、系统管理和维护等方面非常有用。 ### VBS执行CMD命令 #### 1. 基本概念 在开始之前,我们先了解几个基本的概念:...

    易语言控制台调用CMD命令

    例如,如果你想要在易语言程序中执行一条CMD命令,如"dir"(显示当前目录下的文件和目录),你可以使用以下代码: ```易语言 .系统 ("cmd /c dir") ``` 这里的`/c`参数表示执行完命令后关闭CMD窗口,`dir`则是我们...

    C#执行CMD命令获取返回结果

    在这个例子中,我们创建了一个`ProcessStartInfo`对象,设置了CMD进程的启动参数,并配置了重定向标准输出和不使用外壳执行。然后,我们使用`Process.Start`启动CMD进程,并通过`RedirectStandardOutput`属性获取...

    易语言控制台调用CMD命令源码

    3. 执行命令:调用“进程启动”命令启动CMD进程,并执行指定的命令。 4. 获取输出:如果需要获取CMD命令的执行结果,可以使用“读取进程标准输出”命令来读取命令的输出信息。 5. 关闭进程:执行完命令后,别忘了...

    VB 执行CMD命令返回结果

    为了执行CMD命令并获取结果,我们可以使用`Shell`函数启动CMD,然后通过`StdIn.WriteLine`和`StdOut.ReadAll`与CMD进行交互。下面是一个简单的例子,展示如何在VB中执行`dir`命令并获取结果: ```vb Dim Proc As ...

    用c#执行cmd命令

    然后,创建一个Process实例,并设置其StartInfo属性来指定要执行的CMD命令。StartInfo对象允许我们配置进程启动的相关参数,如工作目录、命令行参数等。例如,要执行一个简单的"dir"命令,代码如下: ```csharp ...

    sql server远程执行cmd命令

    标签“远程执行cmd命令”意味着这个功能可以在不同机器之间进行,这可能涉及到网络通信和身份验证。为了远程执行,你需要确保你的SQL Server配置了允许远程连接,并且你的C#应用能够正确地连接到远程服务器。同时,...

    VC++实现CMD命令执行与获得返回信息

    本文将深入探讨如何使用VC++6.0通过`CreateProcess`执行CMD命令,并利用命名管道(Named Pipe)来获取命令执行后的返回信息。 首先,`CreateProcess`是Windows API中用于创建新进程和子进程的关键函数。它接受一...

    cmd windows 执行命令工具

    `cmd`在Windows中的作用和Linux或Unix中的`bash` shell类似,但命令语法和功能有所不同。 `cmd`窗口提供了以下主要功能: 1. **文件和目录操作**:你可以使用`cd`命令改变当前目录,`dir`命令列出目录中的文件和子...

    C#-WinForm执行CMD命令

    综上所述,通过C# WinForm执行CMD命令,我们可以轻松地在桌面应用中集成系统级操作,提高了程序的功能性和灵活性。同时,需要注意安全问题,避免执行潜在危险的命令,确保应用程序的稳定性和安全性。

    Dockerfile中CMD和ENTRYPOINT命令详解

    CMD 和 ENTRYPOINT 指令都是用来指定容器启动时运行的命令。 单从功能上来看,这两个命令几乎是重复的。单独使用其中的一个就可以实现绝大多数的用例。但是既然 doker 同时提供了它们,为了在使用中不至于混淆,...

    C#执行CMD命令

    总结,C#执行CMD命令涉及的关键点包括使用`Process`类,配置`ProcessStartInfo`对象,指定CMD程序和命令,以及处理输出。在实际项目中,可以根据需要调整这些设置,如是否显示CMD窗口,是否异步读取输出,以及如何...

    Java程序执行CMD命令代码实现

    Java程序是如何执行CMD命令的,就是需要RunTime、Process类而已。 具体代码在文档中

    delphi cmd 获取命令返回(源码)

    本文将深入探讨如何使用Delphi通过CMD(命令提示符)执行命令并获取返回结果。这个主题对于系统集成、自动化脚本编写以及需要与操作系统底层交互的应用程序开发至关重要。 首先,我们需要了解CMD在Delphi中的基本...

    VC中调用CMD命令并获取调用结果

    `CreateProcess`允许我们创建一个新的进程,也就是打开一个CMD窗口并执行指定的命令。以下是一个简单的示例: ```cpp STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory(&si, sizeof(si)); si.cb = sizeof(si);...

    C_c++代码执行cmd命令.txt

    文档提供了六种在C++代码中运行cmd命令的方法。并以具体的例子加以说明。

    命令提示符转应用程序 cmd或bat文件转exe可执行文件

    在IT领域,有时我们需要将命令提示符(CMD)脚本或批处理(BAT)文件转换为可执行(EXE)文件,以便在不依赖CMD环境的情况下运行这些脚本。这通常是为了方便分发、保护代码或者使非技术用户能够轻松执行特定任务。...

    qt调用cmd命令和dll例子

    本示例主要探讨如何在Qt环境中调用CMD(命令提示符)命令以及如何加载和使用DLL(动态链接库)文件。这些知识点在Windows操作系统下的程序开发中尤为常见,因为CMD是系统内置的命令行工具,而DLL则允许共享代码和...

Global site tag (gtag.js) - Google Analytics