Docker:了解ENTRYPOINT和CMD指令

时间:2015-06-10 09:48:51

标签: docker

我想问一些关于可以在Dockerfile中使用的ENTRYPOINTCMD指令的问题。

  1. 假设我使用figdocker-compose将本地目录作为卷装入容器中。何时执行了ENTRYPOINTCMD指令?
    • 卷之后还是之前?
  2. 如果我将bash脚本传递给ENTRYPOINT,每次启动容器时都会执行此脚本吗?
  3. 如果有一个bash脚本添加为ENTRYPOINT,那么使用docker rundocker exec执行的所有命令都会作为参数传递给此脚本吗?
  4. 何时执行CMD次恢复?容器启动并装入卷后?
  5. 为什么Dockerfile中只能有一个CMD?如果我想启动一个包含多个进程的容器/运行severa exacutables怎么办?

1 个答案:

答案 0 :(得分:1)

1)ENTRYPOINT和CMD按它们在Dockerfile中出现的顺序执行,无论卷装载

2)如果您有ENTRYPOINT启动动词,则可以传递参数

3)是的,对于docker run,但是一些例子可能会澄清这一点,而docker exec只是让你进入容器

4)CMD在启动容器时执行

5)你可以在Dockerfile中使用多个CMD,但只使用最后一个,docker设计用于运行一个进程,

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

由于CMD很容易被覆盖而不是ENTRYPOINT(除非你docker run --entrypoint),你的Dockerfile中最后一行是最后一行,而最后一行是CMD,实际上是参数,可以改变< / p>