与dockerfile中的CMD和ENTRYPOINT混淆

时间:2017-04-01 03:00:17

标签: mongodb docker dockerfile

我知道在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,但它运行正常?

1 个答案:

答案 0 :(得分:8)

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

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

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

意义:

  • 如果您必须在 mongod之后传递任何参数,则在使用mongod时,您不必先键入docker run:它将是已在docker-entrypoint.sh
  • 中添加
  • 如果您在mongod之后没有任何参数可以通过,则您也不必输入mongodCMD将为您提供ENTRYPOINT docker-entrypoint.sh