Docker #
详见:Docker 学习笔记
entrypoint vs cmd
#
格式
- Shell form
- 实际运行的是 
/bin/sh -c命令- 有些镜像没有 shell 程序,无法使用这种方式
 - 从外部发送任何 POSIX 信号到 docker 容器,
/bin/sh命令不会转发消息给实际运行的命令 
 CMD executable param1 param2ENTRYPOINT executable param1 param2- 会忽略 CMD 或者 docker run 参数
 - 无法覆盖
 
 - 实际运行的是 
 - Exec form
- the JSON array format
 CMD ["executable","param1","param2"]- 如果要使用 Shell 环境变量,必须显示使用 
sh - 如 
CMD [ "sh", "-c", "echo $HOME" ] 
- 如果要使用 Shell 环境变量,必须显示使用 
 ENTRYPOINT ["executable","param1","param2"]- 会把 CMD 接到后面作为参数
 - docker run 可以覆盖:
docker run demo --entrypoint cmd 
- 不管是 ENTRYPOINT 还是 CMD 命令,都强烈建议采用 exec 表示法
 
 
- Shell form
 覆盖
- ENTRYPOINT 或者 CMD 命令会覆盖 base 镜像的 ENTRYPOINT 或者 CMD 命令
- 如果设置了 
ENTRYPOINT而没有设置CMD,则 base 镜像的CMD也会被置为空 
 - 如果设置了 
 - docker run 覆盖
- CMD: 比较容易覆盖:
docker run demo cmd - ENTRYPOINT: 只有 Exec form 可以覆盖:
docker run demo --entrypoint cmd 
 - CMD: 比较容易覆盖:
 
- ENTRYPOINT 或者 CMD 命令会覆盖 base 镜像的 ENTRYPOINT 或者 CMD 命令
 ENTRYPOINT与CMD的最终结果:No ENTRYPOINT ENTRYPOINT exec_entry p1_entry ENTRYPOINT [“exec_entry”, “p1_entry”] No CMD error, not allowed /bin/sh -c exec_entry p1_entry exec_entry p1_entry CMD [“exec_cmd”, “p1_cmd”] exec_cmd p1_cmd /bin/sh -c exec_entry p1_entry exec_entry p1_entry exec_cmd p1_cmd CMD [“p1_cmd”, “p2_cmd”] p1_cmd p2_cmd /bin/sh -c exec_entry p1_entry exec_entry p1_entry p1_cmd p2_cmd CMD exec_cmd p1_cmd /bin/sh -c exec_cmd p1_cmd /bin/sh -c exec_entry p1_entry exec_entry p1_entry /bin/sh -c exec_cmd p1_cmd Kubernetes
- 如果容器没有设置 command 和 args,则使用 docker 镜像自带的命令和参数
 - 如果容器设置了 command(不管有没有设置 args),则 docker 镜像自带命令和参数被忽略
 - 如果容器设置了 args,没有设置 command,则 docker 镜像自带的命令会使用该新参数
 
Docker 与 Kubernetes 中对应的字段名称。
| 描述 | Docker 字段名称 | Kubernetes 字段名称 | 
|---|---|---|
| 容器执行的命令 | Entrypoint | command | 
| 传给命令的参数 | Cmd | args | 
叶王 © 2013-2024 版权所有。如果本文档对你有所帮助,可以请作者喝饮料。