我知道在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
,但它运行正常?
答案 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
之后没有任何参数可以通过,则您也不必输入mongod
:CMD
将为您提供ENTRYPOINT
docker-entrypoint.sh
。