Dockerfile的CMD与ENTRYPOINT的区别

 更新时间:2024年12月16日 11:00:45   作者:芝麻\n  
CMD和ENTRYPOINT的区别在于CMD提供默认的执行指令,而ENTRYPOINT定义容器启动时运行的命令,下面就来详细的介绍一下这两者的区别,具有一定的参考价值,感兴趣的可以了解一下

CMD和ENTRYPOINT

我们先来试一下构建以下这个Dockerfile,并运行

FROM centos

CMD ["ls","-a"]

构建

[root@zhima lizhi]# docker build -t mycentos .
Sending build context to Docker daemon  17.92kB
Step 1/2 : FROM centos
 ---> 5d0da3dc9764
Step 2/2 : CMD ["ls","-a"]
 ---> Running in a1e70a05d8dd
Removing intermediate container a1e70a05d8dd
 ---> 00433fd4c299
Successfully built 00433fd4c299
Successfully tagged mycentos:latest

运行

[root@zhima lizhi]# docker run -it --name "centos1" mycentos
.   .dockerenv	dev  home  lib64       media  opt   root  sbin	sys  usr
..  bin		etc  lib   lost+found  mnt    proc  run   srv	tmp  var

可以发现,进入容器之后,就执行了ls -a命令

我们尝试一下在启动的时候加入一些参数

[root@zhima lizhi]# docker run -it --name "centos2" mycentos -l
docker: Error response from daemon: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: "-l": executable file not found in $PATH: unknown.

我们发现容器并没有执行ls -al,而是直接报错了

其实这就是CMD的特性,当我在启动容器的时候添加了一个CMD后

镜像中定义的CMD就被覆盖掉了

单独的-l当然会报错了

我们来看一下使用ENTRYPOINT会怎么样

修改Dockerfile

FROM centos

ENTRYPOINT ["ls","-a"]

重新构建

[root@zhima lizhi]# docker build -t mycentos .
Sending build context to Docker daemon  17.92kB
Step 1/2 : FROM centos
 ---> 5d0da3dc9764
Step 2/2 : ENTRYPOINT ["ls","-a"]
 ---> Running in 22ef40dea625
Removing intermediate container 22ef40dea625
 ---> 73a3d51b4d84
Successfully built 73a3d51b4d84
Successfully tagged mycentos:latest

运行容器

[root@zhima lizhi]# docker run -it --name "centos1" mycentos -l
total 56
drwxr-xr-x   1 root root 4096 Jul 14 08:52 .
drwxr-xr-x   1 root root 4096 Jul 14 08:52 ..
-rwxr-xr-x   1 root root    0 Jul 14 08:52 .dockerenv
lrwxrwxrwx   1 root root    7 Nov  3  2020 bin -> usr/bin
drwxr-xr-x   5 root root  360 Jul 14 08:52 dev
drwxr-xr-x   1 root root 4096 Jul 14 08:52 etc
drwxr-xr-x   2 root root 4096 Nov  3  2020 home
lrwxrwxrwx   1 root root    7 Nov  3  2020 lib -> usr/lib
lrwxrwxrwx   1 root root    9 Nov  3  2020 lib64 -> usr/lib64
drwx------   2 root root 4096 Sep 15  2021 lost+found
drwxr-xr-x   2 root root 4096 Nov  3  2020 media
drwxr-xr-x   2 root root 4096 Nov  3  2020 mnt
drwxr-xr-x   2 root root 4096 Nov  3  2020 opt
dr-xr-xr-x 191 root root    0 Jul 14 08:52 proc
dr-xr-x---   2 root root 4096 Sep 15  2021 root
drwxr-xr-x  11 root root 4096 Sep 15  2021 run
lrwxrwxrwx   1 root root    8 Nov  3  2020 sbin -> usr/sbin
drwxr-xr-x   2 root root 4096 Nov  3  2020 srv
dr-xr-xr-x  13 root root    0 Jan 29 10:27 sys
drwxrwxrwt   7 root root 4096 Sep 15  2021 tmp
drwxr-xr-x  12 root root 4096 Sep 15  2021 usr
drwxr-xr-x  20 root root 4096 Sep 15  2021 var

可以发现,容器执行的是ls -al-l指令被追加给了ENTRYPOINT定义的语句

到此这篇关于Dockerfile的CMD与ENTRYPOINT的区别的文章就介绍到这了,更多相关Dockerfile CMD与ENTRYPOINT内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Docker容器运行ASP.NET Core的实现步骤

    Docker容器运行ASP.NET Core的实现步骤

    这篇文章主要介绍了Docker容器运行ASP.NET Core的实现步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-04-04
  • 详解ubuntu 16.04安装docker教程

    详解ubuntu 16.04安装docker教程

    本篇文章主要介绍了ubuntu 16.小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • Docker网络之自定义网络方式

    Docker网络之自定义网络方式

    文章介绍了Docker的网络模式,包括bridge、none、container、host和用户自定义网络,并详细说明了docker0网络的特点和自定义网络的创建
    2025-01-01
  • docker run启动的容器挂掉了数据怎么办

    docker run启动的容器挂掉了数据怎么办

    这篇文章主要介绍了docker run启动的容器挂掉了,数据怎么办,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-09-09
  • 利用 trap 在 docker 容器优雅关闭前执行环境清理的方案

    利用 trap 在 docker 容器优雅关闭前执行环境清理的方案

    这篇文章主要介绍了利用 trap 在 docker 容器优雅关闭前执行环境清理的问题,需要在容器的启动脚本中,加入 trap 指令,来完成容器在退出前需要做的所有事情,本文通过脚本示例给大家介绍的非常详细,需要的朋友参考下吧
    2021-12-12
  • 浅析SpringBoot打包上传到docker并实现多实例部署(IDEA版)

    浅析SpringBoot打包上传到docker并实现多实例部署(IDEA版)

    这篇文章主要介绍了SpringBoot打包上传到docker并实现多实例部署(IDEA版),本文通过图文并茂实例详解的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • 详解docker-compose.yml文件常用模版命令

    详解docker-compose.yml文件常用模版命令

    这篇文章主要介绍了docker-compose.yml文件常用模版命令,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2021-11-11
  • Docker 教程之镜像列出详细介绍

    Docker 教程之镜像列出详细介绍

    这篇文章主要介绍了Docker 教程之镜像列出详细介绍的相关资料,需要的朋友可以参考下
    2016-12-12
  • docke自定义网络之容器互联

    docke自定义网络之容器互联

    大家好,本篇文章主要讲的是docke自定义网络之容器互联,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • docker 安装Consul的教程 (最新版2023)

    docker 安装Consul的教程 (最新版2023)

    ​consul是google开源的一个使用go语言开发的服务发现、配置管理中心服务,内置了服务注册与 发现框 架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案,不再需要依赖其 他工具,这篇文章主要介绍了最新版2023 docker 安装Consul,需要的朋友可以参考下
    2023-12-12

最新评论