2017-04-01 4 views
4

ドッカーファイルでは、ENTRYPOINTとCMDの両方が指定されていると、CMDの値はENTRYPOINTのデフォルトパラメータになり、追加のパラメータでコンテナを実行すると、 dockerfileのCMDの値を置き換えます。はドッカーファイルのCMDとENTRYPOINTと混同されています

が、私は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になりませんか? --authmongodを置き換えますので、なぜ私はdocker run mongo --authを実行しますが、正常に動作しますか?

答えて

7

mongod Dockerfile参照docker-entrypoint.sh
このスクリプトのテストによってdocker-entrypoint.sh始まる最初のパラメータは「-」(「--auth」のように)で始まる場合:

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

ので、引数がないだけで--authmongod --authなります。

意味:

  • あなたはmongod後に任意の引数を渡すために持っている場合、あなたはdocker runを使用するときに最初mongodを入力する必要はありません。あなたならば、それはdocker-entrypoint.sh
  • であなたのために追加されますmongodの後に引き渡す引数がない場合は、のいずれかを入力する必要はありません。CMDは、ENTRYPOINTdocker-entrypoint.shにあなたを提供します。
+0

ありがとう、それは今明らかです。 – laoqiren

関連する問題