Docker:了解入口点和CMD指令

我想问一些关于可用于ENTRYPOINTCMD指令的问题。

  1. 假如我使用figdocker-compose将本地目录挂载在容器中。 ENTRYPOINTCMD指令是否ENTRYPOINT执行?
    • 卷后安装或之前?
  2. 如果我将一个bash脚本传递给ENTRYPOINT ,每次启动一个容器时都会执行这个脚本吗?
  3. 如果添加了一个bash脚本作为ENTRYPOINT ,所有使用ENTRYPOINT docker rundocker exec执行的命令是否会作为parameter passing给这个脚本?
  4. 什么时候执行CMD instauctions? 一旦一个容器被启动和卷装?
  5. 为什么Dockerfile中只能有一个CMD ? 如果我想启动一个包含多个进程的容器/运行severa可执行文件呢?

1)ENTRYPOINT和CMD按照它们在Dockerfile中出现的顺序执行,而不考虑卷挂载

2)如果你有一个ENTRYPOINT启动一个动词,你可以传递一个参数

3)对于docker运行是的,但一些例子可能会澄清这一点,docker执行官只是让你在容器内

4)CMD在启动容器时执行

5)你可以在Dockerfile中使用几个CMD,但只有最后一个会被使用,docker被devise为运行一个进程,

如果你想运行几个,你将需要一些工具,如主pipehttp://docs.docker.com/articles/using_supervisord或runit或s6或daemontools请参阅http://docs.docker.com/faq

由于CMD很容易被覆盖,而不是进入点(除非你docker run --entrypoint ),通常你的入口点是Dockerfile和CMD的最后一行,实际上是参数,可以改变