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