Dockerfile 的 CMD 和 ENTRYPOINT 都用于指定容器启动时执行的命令,但行为不同。CMD 可以被 docker run 命令行参数覆盖,而 ENTRYPOINT 不会被覆盖,docker run 的参数会作为 ENTRYPOINT 的参数。CMD 有三种形式:CMD ["executable","param1","param2"](exec 形式)、CMD command param1 param2(shell 形式)、CMD ["param1","param2"](作为 ENTRYPOINT 的参数)。ENTRYPOINT 也有 exec 和 shell 两种形式。最佳实践是使用 ENTRYPOINT 定义可执行文件,用 CMD 定义默认参数。