CMD和ENTRYPOINT的区别
CMD测试
编写dockerfile文件
[root@iZbp1htnoa70qlle394f3wZ dockerfile]# cat CMDos FROM centos:7 CMD ["ls","-a"]
构建镜像
[root@iZbp1htnoa70qlle394f3wZ dockerfile]# docker build -f CMDos -t cmdos:1.0 .
启动镜像
[root@iZbp1htnoa70qlle394f3wZ dockerfile]# docker run -it 7083385c1517 . .dockerenv bin etc lib media opt root sbin sys usr .. anaconda-post.log dev home lib64 mnt proc run srv tmp var
发现启动镜像时,执行了CMD命令
我们尝试在启动镜像时追加命令 发现报错
[root@iZbp1htnoa70qlle394f3wZ dockerfile]# docker run 7083385c1517 -l docker: Error response from daemon: failed to create shim: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: "-l": executable file not found in $PATH: unknown.
ENTRYPOINT测试编写
dockerfile文件
[root@iZbp1htnoa70qlle394f3wZ dockerfile]# cat ENTRYPOINTos FROM centos ENTRYPOINT ["ls","-a"]
构建镜像
[root@iZbp1htnoa70qlle394f3wZ dockerfile]# docker build -f ENTRYPOINTos . # 没有指定镜像名和版本号(建议设置tag) Sending build context to Docker daemon 4.096kB Step 1/2 : FROM centos ---> 5d0da3dc9764 Step 2/2 : ENTRYPOINT ["ls","-a"] ---> Running in a9e6cee88acf Removing intermediate container a9e6cee88acf ---> c7f77b087635 Successfully built c7f77b087635
运行镜像
[root@iZbp1htnoa70qlle394f3wZ dockerfile]# docker run -it c7f77b087635 . .. .dockerenv bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
发现在运行镜像后,执行了ENTRYPOINT命令
到这里好像和CMD命令没有区别
在运行ENTRYPOINT镜像时,追加命令
[root@iZbp1htnoa70qlle394f3wZ dockerfile]# docker run c7f77b087635 -l total 56 drwxr-xr-x 1 root root 4096 Apr 23 01:59 . drwxr-xr-x 1 root root 4096 Apr 23 01:59 .. -rwxr-xr-x 1 root root 0 Apr 23 01:59 .dockerenv lrwxrwxrwx 1 root root 7 Nov 3 2020 bin -> usr/bin drwxr-xr-x 5 root root 340 Apr 23 01:59 dev drwxr-xr-x 1 root root 4096 Apr 23 01:59 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 103 root root 0 Apr 23 01:59 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 Apr 21 15:07 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
这时区别就出来了,ENTRYPOINT可以在运行时追加参数,而CMD不行
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决