作者:Fater-_635 | 来源:互联网 | 2023-02-07 19:49
我知道在dockerfile中,当提供ENTRYPOINT和CMD时,CMD中的值将作为ENTRYPOINT的默认参数,然后当运行带有附加参数的容器时,附加参数将替换dockerfile中的CMD值.
但是当我看到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> VonC..:
该Dockerfile mongod的引用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
.