docker-compose.yml的command参数与Dockerfile的CMD参数有何区别?
Dockerfile RUN/CMD 与 docker-compose command 的核心区别
RUN指令属于镜像构建阶段执行的命令:每一条RUN语句都会在当前镜像层之上新增一层,执行结果会永久固化到构建完成的镜像中。你示例中安装依赖的操作,只会在执行docker build构建镜像的时候运行一次,后续基于该镜像启动容器时不会重复执行。CMD指令属于容器启动阶段的默认执行命令:是镜像自带的默认启动参数,一个Dockerfile中只有最后一条CMD会生效。如果启动容器时没有主动指定其他启动命令,就会默认执行CMD定义的内容,比如你示例中默认启动容器就会运行python3 main.py。- docker-compose中的
command参数作用是覆盖镜像默认的CMD指令:你给对应服务配置command后,启动该服务的容器时,会直接执行command定义的内容,完全忽略镜像原本的CMD设置,比如你示例中配置了echo语句后,container_a启动时只会输出对应提示,不会运行原来的python3 main.py。
内容的提问来源于stack exchange,提问作者Alexander Rakhmaev
相关产品推荐
相关产品推荐

