Dockerfile 中的 CMD
指令主要用于指定容器启动时默认执行的命令。它有两种形式:shell 形式和 exec 形式。
-
Shell 形式:
CMD command param1 param2
在这种形式下,CMD 指令会在 shell 中运行,通常是/bin/sh -c
。例如,CMD echo "Hello, World!"
会在容器启动时在 shell 中执行echo "Hello, World!"
。 -
Exec 形式:
CMD ["executable","param1","param2"]
这种形式直接调用可执行文件,不经过 shell。这样可以避免 shell 中的某些限制,如变量扩展问题等。例如,CMD ["python", "app.py"]
会在容器启动时直接执行python app.py
命令。
一个典型的例子是在运行一个 web 服务器的容器时使用 CMD 指令。假设有一个基于 Flask 的 Python 应用程序,Dockerfile 可能看起来是这样的:
dockerfileFROM python:3.8 COPY . /app WORKDIR /app RUN pip install -r requirements.txt EXPOSE 5000 CMD ["python", "app.py"]
在这个 Dockerfile 中,CMD ["python", "app.py"]
指定了当容器启动时应运行的命令。这意味着每次容器启动时,都会启动 Flask 应用程序。
需要注意的是,如果通过 docker run
命令行传递了额外的参数,那么它们会覆盖 Dockerfile 中的 CMD 指令。这提供了运行时的灵活性,可以根据需要更改容器的默认行为。
2024年8月9日 13:53 回复