在Dockerfile里,CMD指令是可以被覆盖的。
在构建镜像时,可以通过docker build命令的–cmd选项覆盖Dockerfile的CMD:
例如:
FROM ubuntu
CMD ["echo","hello"]
构建时覆盖CMD:
docker build -t test --cmd "echo world" .
在创建容器时,可以通过docker run命令的–cmd选项覆盖镜像的CMD:
docker run test --cmd "echo hi"
在启动已存在的容器时,通过docker start命令的–cmd选项覆盖:
docker start --cmd "echo hi" mycontainer
在运行中的容器内可以直接执行其他命令,会覆盖CMD指令。
所以Dockerfile中的CMD指令只是提供一个默认的命令,在之后各种使用场景下都是可以被覆盖的。
我们可以通过CMD提供一个应用的默认启动命令,但在具体运行时可以很灵活地修改和覆盖它。