在 Dockerfile 中 CMD 和ENTRYPOINT可以混着用吗?
在 Dockerfile 中,CMD
和 ENTRYPOINT
是两个不同的指令,它们可以单独使用,也可以结合使用。
-
CMD
指令用于指定容器启动时默认执行的命令。它可以有三种形式:
-
CMD ["executable","param1","param2"]
(推荐):使用 JSON 数组形式指定命令和参数。
-
CMD command param1 param2
:使用命令字符串形式指定命令和参数。
-
CMD ["param1","param2"]
:提供默认参数给 ENTRYPOINT 指令。
-
ENTRYPOINT
指令用于配置容器启动时执行的命令。它也可以有三种形式:
-
ENTRYPOINT ["executable", "param1", "param2"]
(推荐):使用 JSON 数组形式指定命令和参数。
-
ENTRYPOINT command param1 param2
:使用命令字符串形式指定命令和参数。
-
ENTRYPOINT ["param1", "param2"]
:作为默认参数,与 CMD 结合使用。
当 CMD
和 ENTRYPOINT
指令同时存在于 Dockerfile 中时,它们的行为会结合起来。具体来说:
- 如果没有指定
CMD
,但指定了 ENTRYPOINT
,容器启动时将执行 ENTRYPOINT
指定的命令,并且可以通过 docker run
命令的参数来提供参数。
- 如果同时指定了
CMD
和 ENTRYPOINT
,则 CMD
的内容将作为 ENTRYPOINT
命令的默认参数。可以通过 docker run
命令的参数来覆盖 CMD
中的默认参数。
使用 CMD
和 ENTRYPOINT
可以根据需要灵活地定义容器的启动命令和参数。根据实际需求,你可以单独使用其中一个指令,或者将它们结合起来以满足特定的需求。