1. 前情提要 CMD和ENTRYPOINT是Dockerfile里构建镜像的命令 2. CMD 在构建镜像时,如果使用了多个CMD,只生效最后一个CMD是容器启动时默认要执行的命令在dockerfile内部用CMD提前写好启动时要执行的命令或在启动容器时docker run追加是一样的效果如果dockerfile内部有CMD,docker run 也追加了命令,则docker run 追加的命令会覆盖CMD的命令 测试CMD 创建dockerfile编写dockerfile FROM centos CMD ["ls", "-a"] 构建dockerfile docker build -f dockerfile名 -t 目标镜像名 运行容器 docker run 镜像ID #默认执行CMD,"ls -a" docker run 镜像ID -l #由于CMD是不可追加,只会被替换的,所以实际执行的是,"-l",不是命令,会报错 3. ENTRYPOINT ENTRYPOINT的指令,在启动容器后追加,是不会被覆盖的 测试ENTRYPOINT 创建dockerfile编写dockerfile FROM centos ENTRYPOINT ["ls", "-a"] 构建dockerfile docker build -f dockerfile名 -t 目标镜像名 运行容器 docker run 镜像ID -l #相当于"ls -al" 补充: CMD 和ENTRYPOINT同时出现在dockerfile中时,CMD中的参数会被附加到ENTRYPOINT 指令的后面docker run命令带了参数,这个参数会覆盖掉CMD指令的参数,并也会附加到ENTRYPOINT 指令的后面。