Docker #
更多内容见:Docker 学习笔记
entrypoint
vs cmd
#
-
格式
- Shell form
- 实际运行的是
/bin/sh -c
命令- 有些镜像没有 shell 程序,无法使用这种方式
- 从外部发送任何 POSIX 信号到 docker 容器,
/bin/sh
命令不会转发消息给实际运行的命令
CMD executable param1 param2
ENTRYPOINT 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 版权所有。如果本文档对你有所帮助,可以请作者喝饮料。