上面示例中图像名称ubuntu之后的所有内容都是命令并传递给入口点。使用CMD指令时,就像执行 一样docker run -i -t ubuntu <cmd> 入口点的参数是<cmd>。
如果您改为键入此命令docker run -i -t ubuntu,您也会得到相同的结果:bash shell将在容器中启动,因为在ubuntu Dockerfile中指定了默认的CMD: CMD ["bash"].
当所有内容都传递到入口点时,你可以从图像中获得非常好的行为。@Jiri示例很好,它展示了如何将图像用作“二进制”。当使用["/bin/cat"]作为入口点然后执行docker run img /etc/passwd时,你会得到它,/etc/passwd是命令并传递给入口点,因此最终结果执行简单地/bin/cat /etc/passwd。
另一个例子是将任何cli作为入口点。例如,如果您有一个redis图像,而不是运行docker run redisimg redis -H something -u toto get key,您可以简单地拥有ENTRYPOINT ["redis", "-H", "something", "-u", "toto"],然后像这样运行以获得相同的结果:docker run redisimg get key。
docker run -it --rm yourcontainer /bin/bash <-- /bin/bash overrides CMD<-- /bin/bash does not override ENTRYPOINTdocker run -it --rm --entrypoint ls yourcontainer <-- overrides ENTRYPOINT with lsdocker run -it --rm --entrypoint ls yourcontainer -la <-- overrides ENTRYPOINT with ls and overrides CMD with -la