Dockerfile 中 run 、cmd、entrypoint 的区别

refer to https://www.cnblogs.com/CloudMan6/p/6875834.html

entrypoint 指令后面的启动脚本中也必须有一个持续运行的进程,否则 执行 docker run 的时候会自动退出。

entrypoint 和 cmd 区别

区别一:

使用 entrypoint 之后, 再 docker run 镜像的时候,可以接 entrypoint 里面设置的命令 参数。
而使用 cmd 之后,docker run 就基本覆盖了cmd 里面的设置的命令。

区别二:

Dockerfile 如果最后使用的是 entrypoint,构建完成后使用 docker run 后面如果再接命令,会报错 多余的参数。
如果使用的CMD,构建完成后就会被覆盖掉。
所以使用entrypoint之后,再docker run 时后台运行即可,再用 exec 进入容器

总结:

两个区别主要是在应用的时候展现出来的。所以可以根据应用场景来判断使用哪个指令。
如果 启动的是一个包含大量命令的脚本,如 start.sh 的话,这里可以使用 start.sh,保证run的时候不被覆盖。
如果 希望启动的容器只包含一条 持续运行的命令的话,就可以使用 CMD 。如 sshd 服务,这样 docker run 的时候可以选择覆盖或者不覆盖。

如果一起使用,cmd 中的指令就会变成 entrypoint 的参数。

posted @ 2022-08-04 15:47  风风羊  阅读(775)  评论(0编辑  收藏  举报