Dockerfile中CMD与ENTRYPOINGT区别
大约 1 分钟DockerDocker
介绍
CMD
作用:CMD指令用来指定启动容器时默认执行的命令
格式
- CMD ["executable", "param1", "param2"]:相当于执行executable param1 param2,推荐方式;
- CMD command param1 param2:在默认的Shell中执行,提供给需要交互的应用
- CMD ["param1", "param2"]:提供给ENTRYPOINT的默认参数
注意:
- 每个Dockerfile只能有一条CMD命令。如果指定了多条命令,只有最后一条会被执行
- 如果用户启动容器时候手动指定了运行的命令(作为run命令的参数),则会覆盖掉CMD指定的命令
ENTRYPOINT
- 作用: 指定镜像的默认入口命令,该入口命令会在启动容器时作为根命令执行,所有传入值作为该命令的参数
- 格式
- ENTRYPOINT ["executable", "param1", "param2"]:exec调用执行
- ENTRYPOINT command param1 param2:shell中执行
- 注意
- 每个Dockerfile中只能有一个ENTRYPOINT,当指定多个时,只有最后一个起效。
实践
CMD测试
Dockerfile如下:
FROM ubuntu:14.04
CMD ["echo","hello world"]
执行命令 docker run -it --rm test:1.0 /bin/sh -c 'echo hello 11111'
输出如下:
用户启动容器时候手动指定了运行的命令(作为run命令的参数),则会覆盖掉CMD指定的命令。
ENTRYPOINT测试
Dockerfile如下:
FROM ubuntu:14.04
ENTRYPOINT ["echo","hello world"]
CMD ["向往"]
执行命令 docker run -it --rm test:1.1
,结果如下:
可见CMD给ENTRYPOINT提供了默认参数。
替换CMD默认参数。