跳至主要內容

Dockerfile中CMD与ENTRYPOINGT区别

xw大约 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默认参数。