您的位置:首页 > 新闻 > 热点要闻 > 怎么弄网站_深圳装饰公司前十强_百度关键词搜索工具_seo网站优化方法

怎么弄网站_深圳装饰公司前十强_百度关键词搜索工具_seo网站优化方法

2024/12/22 19:57:34 来源:https://blog.csdn.net/LONG_Yi_1994/article/details/144520206  浏览:    关键词:怎么弄网站_深圳装饰公司前十强_百度关键词搜索工具_seo网站优化方法
怎么弄网站_深圳装饰公司前十强_百度关键词搜索工具_seo网站优化方法

CMDENTRYPOINT 都用于在容器启动时指定执行的命令,但它们有不同的行为、用途和优先级。结合覆盖相关的内容,我们可以更清晰地总结它们的区别和使用方式。


1. 功能定位

指令主要用途
CMD为容器提供默认的命令或参数,可以被 docker run 提供的命令完全覆盖。
ENTRYPOINT定义容器的主进程,不会被 docker run 提供的命令覆盖,但可以通过 --entrypoint 显式替换。

2. 行为差异

CMD 的行为
  • 默认命令CMD 是容器的默认命令,只有当运行容器时没有指定命令时,CMD 才会执行。
  • 完全覆盖:如果在 docker run 后提供了命令,则 CMD 的内容会被完全替代。
ENTRYPOINT 的行为
  • 强制主进程ENTRYPOINT 会始终执行,即使运行时提供了命令,命令也会作为参数传递给 ENTRYPOINT,而不会替换它。
  • 覆盖方式:可以使用 --entrypoint 参数显式覆盖 ENTRYPOINT

3. 优先级规则

情景运行的命令
仅定义 CMD执行 CMD 的内容。
仅定义 ENTRYPOINT执行 ENTRYPOINT 的内容。
同时定义 ENTRYPOINTCMDENTRYPOINT 执行,CMD 提供默认参数,运行时传入的命令会替代 CMD 参数而不是覆盖 ENTRYPOINT
使用 --entrypoint 覆盖显式替换 ENTRYPOINTCMD 被忽略,运行时命令直接执行。

4. 示例对比

仅使用 CMD

dockerfile

FROM ubuntu:20.04 
CMD ["echo", "Default CMD"]
  • 运行容器时默认执行 CMD

    docker run <image>

    输出:Default CMD
  • 运行时提供命令会覆盖 CMD

    docker run <image> echo "Override CMD"

    输出:Override CMD

仅使用 ENTRYPOINT

dockerfile

FROM ubuntu:20.04 
ENTRYPOINT ["echo"]
  • 运行容器时,ENTRYPOINT 始终生效:

    docker run <image> Default

    输出:Default
  • 即使提供命令,命令也只是作为参数传递给 ENTRYPOINT

    docker run <image> "Override EntryPoint"

    输出:Override EntryPoint
  • 使用 --entrypoint 替换:

    docker run --entrypoint "/bin/bash" <image> -c "echo 'New EntryPoint'"

    输出:New EntryPoint

CMD + ENTRYPOINT 结合使用

dockerfile

FROM ubuntu:20.04 
ENTRYPOINT ["echo"] 
CMD ["Default CMD"]
  • 默认情况下,CMD 的内容作为参数传递给 ENTRYPOINT

    docker run <image>

    输出:Default CMD
  • 运行时提供的命令会替代 CMD 的内容(但不会替换 ENTRYPOINT):

    docker run <image> "Override CMD"

    输出:Override CMD
  • 使用 --entrypoint 替换时,CMD 被忽略:

    docker run --entrypoint "/bin/bash" <image> -c "echo 'New EntryPoint'"

    输出:New EntryPoint

5. 使用场景

CMD 的适用场景
  • 为镜像提供默认行为,但允许运行时完全覆盖。
  • 例如:

    CMD ["nginx", "-g", "daemon off;"]

    • 默认运行 Nginx。
    • 运行时可以完全替代默认命令,例如:

      docker run <image> bash

ENTRYPOINT 的适用场景
  • 确保容器始终运行指定的主进程,例如服务或脚本。
  • 配合 CMD 提供默认参数。
  • 例如:

    dockerfile

    ENTRYPOINT ["python3"] 
    CMD ["app.py"]
    • 默认运行 python3 app.py
    • 运行时可以替代 app.py

      docker run <image> other_script.py

      输出:python3 other_script.py

6. 总结区别

属性CMDENTRYPOINT
是否被覆盖容器运行时命令会完全替代 CMD 的内容。容器运行时命令作为参数传递,不替代 ENTRYPOINT
主进程定义定义默认命令,但不是强制的主进程。定义容器的主进程,容器生命周期依赖它。
配合使用的作用ENTRYPOINT 提供默认参数。始终执行主程序,CMD 或运行时命令提供参数。
覆盖方式容器运行时直接指定新命令即可覆盖。使用 --entrypoint 替代。

推荐

  • 使用 CMD 设置可选的默认行为。
  • 使用 ENTRYPOINT 定义强制的主程序,配合 CMD 提供默认参数,确保容器行为更可控。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com