Docker 指令之 ENTRYPOINT 和 CMD
·144 字·1 分钟
docker
docker
CMD 和 ENTRYPOINT 指令在运行容器时决定哪些命令将被执行。下面是它们几条共同合作的规则:
- Dockerfile 应该至少指定一个
CMD或者ENTRYPOINT命令。 ENTRYPOINT应该在使用可执行容器时被指定。CMD应该作为ENTRYPOINT命令定义默认参数或者运行即席命令的一种方式。CMD在容器作为可替换参数时会被替换。
下面例子将会演示上述的规则:
没有 ENTRYPOINT #
带方括号([])的是执行形式(exec form,推荐使用),如果不带方括号则是shell形式(就会在命令的前面加上 /bin/sh -c )。
| 命令 | 说明 |
|---|---|
| No CMD | 错误,不允许 |
| CMD [“exec_cmd”, “p1_cmd”] | exec_cmd p1_cmd |
| CMD [“p1_cmd”, “p2_cmd”] | p1_cmd p2_cmd |
| CMD exec_cmd p1_cmd | /bin/sh -c exec_cmd p1_cmd |
ENTRYPOINT exec_entry p1_entry(shell 形式) #
第三个命令就是使用 CMD 为 ENTRYPOINT 设置默认参数(CMD 中都只是参数而不是可执行程序)。
| 命令 | 说明 |
|---|---|
| No CMD | /bin/sh -c exec_entry p1_entry |
| CMD [“exec_cmd”, “p1_cmd”] | /bin/sh -c exec_entry p1_entry exec_cmd p1_cmd |
| CMD [“p1_cmd”, “p2_cmd”] | /bin/sh -c exec_entry p1_entry p1_cmd p2_cmd |
| CMD exec_cmd p1_cmd | /bin/sh -c exec_entry p1_entry /bin/sh -c exec_cmd p1_cmd |
ENTRYPOINT [“exec_entry”, “p1_entry”](执行形式) #
| 命令 | 说明 |
|---|---|
| No CMD | exec_entry p1_entry |
| CMD [“exec_cmd”, “p1_cmd”] | exec_entry p1_entry exec_cmd p1_cmd |
| CMD [“p1_cmd”, “p2_cmd”] | exec_entry p1_entry p1_cmd p2_cmd |
| CMD exec_cmd p1_cmd | exec_entry p1_entry /bin/sh -c exec_cmd p1_cmd |
Over! #
引用自: What is the difference between CMD and ENTRYPOINT in a Dockerfile?
