CMD 和 ENTRYPOINT:二者至少指定一个,指定方式都支持 shell 和 exec 两种风格:

    • shell: CMD executable param1 param2
    • exec: CMD [“executable”,”param1”,”param2”]

    推荐 exec 方式,因为 shell 方式本质是:/bin/sh -c … 执行的。

    对于只有 CMD 的:

    • docker run ${image} 的效果是执行 CMD
    • docker run ${image} ${optional} 的效果是执行 ${optional}

    对于只有 ENTRYPOINT 的:

    • docker run ${image} 的效果是执行 ENTRYPOINT
    • docker run —entrypoint ${optional} ${image} 的效果是执行 ${optional},注意 —entrypoint ${optional} 放在 ${image} 之前

    如果 CMD 和 ENTRYPOINT 二者同时配置(此时切记都用 exec 风格):
    1. docker run 时如果不指定内容,则执行 ENTRYPOINT CMD
    2. docker run 时如果指定内容,则执行 ENTRYPOINT ${指定的参数}

    通常如果一个 Dockerfile 中带有 ENTRYPOINT,那么表示不希望这个镜像作为其他用途,希望专注运行 ENTRYPOINT 对应的程序。

    常见临时启动的用法:
    docker run -it —rm —entrypoint /bin/sh ${image}