Sé que en el dockerfile, cuando se proporcionan ENTRYPOINT y CMD, los valores en CMD serán como parámetro predeterminado de ENTRYPOINT, luego, cuando se ejecuta un contenedor con un parámetro adicional, el parámetro adicional reemplazará los valores de CMD en dockerfile.
pero cuando veo el dockerfile de mongodb, estoy confundido, el punto de entrada y cmd forman parte de su dockerfile:
ENTRYPOINT ["docker-entrypoint.sh"] EXPOSE 27017 CMD ["mongod"] Sé que cuando ejecuto docker run mongo:latest será docker-entrypoint.sh mongod , pero cuando ejecuto docker run mongo:latest --auth , ¿por qué podría funcionar correctamente? ¿No será docker-entrypoint.sh --auth ? dado que --auth reemplazará a mongod , entonces, ¿por qué ejecuto docker run mongo --auth pero funciona bien?
El mongod Dockerfile hace referencia docker-entrypoint.sh .
Ese script docker-entrypoint.sh comienza probando si el primer parámetro comienza con ' - ' (como en ' --auth '):
if [ "${1:0:1}" = '-' ]; then set -- mongod "$@" fi Entonces los argumentos se vuelven mongod --auth , no solo --auth .
Sentido:
mongod , no tiene que escribir mongod primero cuando use docker run : se agregará para usted en docker-entrypoint.shmongod , tampoco tiene que escribir mongod : CMD se lo proporcionará a ENTRYPOINT docker-entrypoint.sh .