文章详情

专注互联网科技,赋能企业数字化发展

Docker面试题五:CMD和ENTRYPOINT的区别

作者:Docker面试题五:CMD和ENTRYPOINT的区别

很多人写 Dockerfile,最容易混的就是 `CMD` 和 `ENTRYPOINT`。只会背“一个默认命令,一个入口”,面试里还不够。更好的答法,是把它们放进 `docker run` 里讲清楚。 一、CMD `CMD` 负责默认命令,或者默认参数。镜像构建好后,直接 `docker run myimg` 就按它来;但你一旦写成 `docker run myimg echo hi`,它就会被覆盖。 面试答法:`CMD` 就是默认值,给容器一个起跑线。 二、ENTRYPOINT `ENTRYPOINT` 更像容器主程序,适合服务镜像、工具镜像、固定入口场景。普通 `docker run` 改不掉它,真要换入口,用 `--entrypoint`。 面试答法:`ENTRYPOINT` 是硬入口,保证容器始终跑同一个主进程。 三、一起用 这块最容易出分。`ENTRYPOINT` 定入口,`CMD` 留默认参数。两者并存时,`CMD` 会作为 `ENTRYPOINT` 的参数;`docker run` 后面追加的内容,会替换 `CMD`,不会替换 `ENTRYPOINT`。 所以默认会跑成 `python app.py --port 8080`,而 `docker run myimg --port 9090` 只是换参数。 加分点:入口稳定,参数灵活。 四、面试怎么答 我一般会这样收尾:单独跑一个命令,或者希望容器更灵活,优先 `CMD`。服务镜像、固定业务进程,优先 `ENTRYPOINT`。生产里最常见的,就是两者一起用,`ENTRYPOINT` 定入口,`CMD` 留参数。 一句话总结:`CMD` 是默认值,`ENTRYPOINT` 是固定入口。前者灵活,后者稳定。 #运维面试 #Docker #docker #docker面试 #docker面试题 #Docker面试题

返回新闻列表