FROM busybox
ENTRYPOINT ["echo", "echo", "echo"] # 3 个部分
CMD ["c", "d", "e", "f", "g"] # 5 个部分
Docker 规则:
ENTRYPOINT 全部 + CMD 全部 = 直接拼在一起,变成一条命令!
拼起来就是:
echo echo echo c d e f g
执行结果:echo echo c d e f g
CMD 的唯一设计意义
给容器设置默认启动参数 / 默认子命令
允许用户在 docker run 镜像 后面跟内容 直接覆盖替换 这套默认参数
不用改 Dockerfile、不用重新构建镜像,就能临时换启动参数
eg:
场景 1:只用 CMD 不写 ENTRYPOINT
dockerfile:
CMD ["nginx", "-g", "daemon off;"]
此时 CMD 是完整启动命令 + 参数
docker run 镜像 就执行这条
docker run 镜像 ls -l → 直接整条替换,不跑 nginx 改跑 ls
意义:给镜像设默认启动命令,支持运行时一键替换整个命令
场景 2:ENTRYPOINT + CMD 搭配
dockerfile:
ENTRYPOINT ["/usr/bin/nginx"]
CMD ["-g", "daemon off;"]
ENTRYPOINT:固定主程序,写死不换
CMD:给主程序的默认参数
运行:
docker run 镜像 → 用 CMD 默认参数:nginx -g daemon off;
docker run 镜像 -v → 覆盖 CMD,变成:nginx -v