2017-04-01 3 views
4

Ich wusste, dass in der Dockerfile, wenn ENTRYPOINT und CMD beide zur Verfügung gestellt werden, die Werte in CMD als Standardparameter von ENTRYPOINT, dann beim Ausführen eines Containers mit zusätzlichen Parameter, der zusätzliche Parameter ersetzt die Werte von CMD in dockerfile.verwechselt mit CMD und ENTRYPOINT in Dockerfile

aber wenn ich die dockerfile von mongodb sehen, ich bin verwirrt, der Einstiegspunkt und cmd Teil seiner dockerfile:

ENTRYPOINT ["docker-entrypoint.sh"] 

EXPOSE 27017 
CMD ["mongod"] 

Ich weiß, wenn ich docker run mongo:latest laufen diese docker-entrypoint.sh mongod sein wird, aber wenn ich laufe docker run mongo:latest --auth Warum konnte es richtig laufen? Wird es nicht docker-entrypoint.sh --auth sein? da die --auth ersetzen mongod, also warum ich docker run mongo --auth laufen, aber es funktioniert gut?

Antwort

7

Die mongod Dockerfile Referenzen docker-entrypoint.sh.
das Skript docker-entrypoint.sh beginnt durch die Prüfung, ob der erste Parameter mit '-' (wie in '--auth') beginnt:

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

So werden die Argumente mongod --auth, nicht nur --auth.

Bedeutung:

  • , wenn Sie irgendein Argument übergeben haben nachmongod, Sie müssen nicht mongod zuerst eingeben, wenn docker run mit: es wird
  • , wenn Sie in docker-entrypoint.sh für euch hinzugefügt werden Haben Sie kein Argument nach mongod zu übergeben, müssen Sie nicht mongod entweder eingeben: CMD wird es für Sie an die ENTRYPOINTdocker-entrypoint.sh geben.
+0

vielen dank, es ist jetzt klar. – laoqiren

Verwandte Themen