Cmd vs Entrypoint

CMD vs ENTRYPOINT #

CMD #

用于提供容器启动时的默认命令和参数。

它的特点是

  • 可以被容器运行时的命令行参数完全覆盖
  • 如果定义了多个CMD, 只有最后一个会生效
  • 适合需要灵活改变启动命令的场景
FROM quay.io/curl/curl-base:latest

RUN apk add jq
ENV LATEST_URL "https://api.github.com/repos/curl/curl-container/releases/latest"

CMD ["curl", "-s", "$LATEST_URL", "|" , "jq", "."]

ENTRYPOINT #

用于设置容器启动时的主程序。

它的特点是:

  • 不会被命令行参数覆盖, 而是会把命令行参数作为其参数
  • 更像是可执行程序的入口点
  • 适合容器作为可执行程序使用的场景

podman run -it --rm --name curl --network host quay.io/curl/curl:latest -V