【问题标题】:confused with CMD and ENTRYPOINT in dockerfile与 dockerfile 中的 CMD 和 ENTRYPOINT 混淆
【发布时间】:2017-04-01 03:00:16
【问题描述】:

我知道在dockerfile中,当ENTRYPOINT和CMD都提供时,CMD中的值将作为ENTRYPOINT的默认参数,然后在运行带有附加参数的容器时,附加参数将替换CMD中的值dockerfile。

但是当我看到mongodb的dockerfile时,我很困惑,它的dockerfile的入口点和cmd部分:

ENTRYPOINT ["docker-entrypoint.sh"]

EXPOSE 27017
CMD ["mongod"]

我知道当我运行docker run mongo:latest 时会是docker-entrypoint.sh mongod,但是当我运行docker run mongo:latest --auth 时,为什么它可以正常运行?不会是docker-entrypoint.sh --auth吗?既然--auth 将取代mongod,那么为什么我运行docker run mongo --auth 但它工作正常?

【问题讨论】:

    标签: mongodb docker dockerfile


    【解决方案1】:

    mongod Dockerfile 引用 docker-entrypoint.sh
    该脚本docker-entrypoint.sh首先测试第一个参数是否以'-'开头(如'--auth'):

    if [ "${1:0:1}" = '-' ]; then
        set -- mongod "$@"
    fi
    

    所以参数变为mongod --auth,而不仅仅是--auth

    意思:

    • 如果您必须在mongod 之后传递任何参数,则在使用docker run 时不必先输入mongod:它将在docker-entrypoint.sh 中为您添加
    • 如果您在mongod 之后没有要传递的任何参数,您也不必输入mongodCMD 将为您提供给ENTRYPOINTdocker-entrypoint.sh

    【讨论】:

      猜你喜欢
      • 2014-02-28
      • 2020-01-13
      • 2021-11-30
      • 2022-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-31
      • 2019-02-09
      相关资源
      最近更新 更多