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}