Docker:了解入口点和CMD指令
我想问一些关于可用于ENTRYPOINT
和CMD
指令的问题。
- 假如我使用
fig
或docker-compose
将本地目录挂载在容器中。ENTRYPOINT
和CMD
指令是否ENTRYPOINT
执行?- 卷后安装或之前?
- 如果我将一个bash脚本传递给
ENTRYPOINT
,每次启动一个容器时都会执行这个脚本吗? - 如果添加了一个bash脚本作为
ENTRYPOINT
,所有使用ENTRYPOINT
docker run
或docker exec
执行的命令是否会作为parameter passing给这个脚本? - 什么时候执行
CMD
instauctions? 一旦一个容器被启动和卷装? - 为什么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的最后一行,实际上是参数,可以改变