【Docker】Dockerfile 之 ENTRYPOINT(四)

参考教程:https://docs.docker.com/engine/reference/builder/

环境

  1. virtual box 6.1
  2. centos 7.8
  3. docker 19.03

ENTRYPOINT 和 CMD 的交互

Both CMD and ENTRYPOINT instructions define what command gets executed when running a container. There are few rules that describe their co-operation.
CMDENTRYPOINT 指令均定义了运行容器时执行的命令。有少量的规则描述他们的合作。

  1. Dockerfile should specify at least one of CMD or ENTRYPOINT commands.

  2. Dockerfile 应该至少指定 CMDENTRYPOINT 命令之一。

  3. ENTRYPOINT should be defined when using the container as an executable.

  4. 使用容器作为可执行文件时,应定义 ENTRYPOINT

  5. CMD should be used as a way of defining default arguments for an ENTRYPOINT command or for executing an ad-hoc command in a container.

  6. 应该使用 CMD 作为定义 ENTRYPOINT 命令或在容器中执行命令的默认参数的方式。

  7. CMD will be overridden when running the container with alternative arguments.

  8. 当使用其他参数运行容器时,CMD 将被覆盖。

The table below shows what command is executed for different ENTRYPOINT / CMD combinations:
下表显示了针对不同的 ENTRYPOINT/CMD 组合执行的命令:

No ENTRYPOINT ENTRYPOINT exec_entry p1_entry ENTRYPOINT [“exec_entry”, “p1_entry”]
No CMD error, not allowed /bin/sh -c exec_entry p1_entry exec_entry p1_entry
CMD [“exec_cmd”, “p1_cmd”] exec_cmd p1_cmd /bin/sh -c exec_entry p1_entry exec_entry p1_entry exec_cmd p1_cmd
CMD [“p1_cmd”, “p2_cmd”] p1_cmd p2_cmd /bin/sh -c exec_entry p1_entry exec_entry p1_entry p1_cmd p2_cmd
CMD exec_cmd p1_cmd /bin/sh -c exec_cmd p1_cmd /bin/sh -c exec_entry p1_entry exec_entry p1_entry /bin/sh -c exec_cmd p1_cmd

Note

If CMD is defined from the base image, setting ENTRYPOINT will reset CMD to an empty value. In this scenario, CMD must be defined in the current image to have a value.

注意

如果从基础镜像定义了 CMD,则设置 ENTRYPOINT 会将 CMD 重置为空值。在这种情况下,必须在当前镜像中定义CMD 以具有值。

总结

介绍了 Dockerfile 中 ENTRYPOINT 指令和 CMD 指令的交互。

原文地址:https://www.cnblogs.com/jiangbo44/p/14116463.html