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 的参数。