Docker命令--cmd和entrypoint区别

本文通过实例演示了Docker中CMD和ENTRYPOINT命令的使用及它们的区别。CMD命令在不追加参数时生效,追加参数会替换原有命令;而ENTRYPOINT命令始终保持不变,追加参数作为参数传递给它。测试结果显示,当使用CMD时,-l追加命令导致错误,而ls-al追加命令正常执行列出文件;对于ENTRYPOINT,追加的-l和ls-al都能正确与ENTRYPOINT命令结合,展示文件列表。
cmd    			#指定容器启动时要运行的命令,只有最后一个命令会生效,原来的命令可被后追加的命令替代
entrypoint		#指定这个容器启动时要运行的命令,可追加命令

一、测试cmd命令

1.1创建测试文件

vi dcf-cmd-test

内容如下:
FROM centos
CMD [“ls”,"-a"]

1.2创建镜像

[root@docker ~]# docker build -f dcf-cmd-test -t ctest .
Sending build context to Docker daemon  30.72kB
Step 1/2 : FROM centos
 ---> 5d0da3dc9764
Step 2/2 : CMD ["ls","-a"]
 ---> Running in 93faddf34a73
Removing intermediate container 93faddf34a73
 ---> 61ea8d97da74
Successfully built 61ea8d97da74
Successfully tagged ctest:latest

1.3运行镜像,ls -a生效

[root@docker ~]# docker run 61ea8d97da74
.
..
.dockerenv
bin
dev
etc
home
lib
lib64
lost+found
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var

1.4追加命令 -l 测试

[root@docker ~]# docker run 61ea8d97da74 -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.
ERRO[0000] error waiting for container: context canceled

报错原因:由于在CMD命令情况下,-l替换了CMD [“ls”,"-a"]命令,而-l不是命令。

1.5追加命令ls -al测试

[root@docker ~]# docker run 61ea8d97da74 ls -al
total 0
drwxr-xr-x.   1 root root   6 Oct  9 13:39 .
drwxr-xr-x.   1 root root   6 Oct  9 13:39 ..
-rwxr-xr-x.   1 root root   0 Oct  9 13:39 .dockerenv
lrwxrwxrwx.   1 root root   7 Nov  3  2020 bin -> usr/bin
drwxr-xr-x.   5 root root 340 Oct  9 13:39 dev
drwxr-xr-x.   1 root root  66 Oct  9 13:39 etc
drwxr-xr-x.   2 root root   6 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   6 Sep 15 14:17 lost+found
drwxr-xr-x.   2 root root   6 Nov  3  2020 media
drwxr-xr-x.   2 root root   6 Nov  3  2020 mnt
drwxr-xr-x.   2 root root   6 Nov  3  2020 opt
dr-xr-xr-x. 131 root root   0 Oct  9 13:39 proc
dr-xr-x---.   2 root root 162 Sep 15 14:17 root
drwxr-xr-x.  11 root root 163 Sep 15 14:17 run
lrwxrwxrwx.   1 root root   8 Nov  3  2020 sbin -> usr/sbin
drwxr-xr-x.   2 root root   6 Nov  3  2020 srv
dr-xr-xr-x.  13 root root   0 Oct  9 12:47 sys
drwxrwxrwt.   7 root root 171 Sep 15 14:17 tmp
drwxr-xr-x.  12 root root 144 Sep 15 14:17 usr
drwxr-xr-x.  20 root root 262 Sep 15 14:17 var

二、测试CMD命令

2.1创建测试文件

vi dcf-cmd-testentrypoint

内容如下:
FROM centos
ENTRYPOINT [“ls”,"-a"]

2.2创建镜像

[root@docker ~]# docker build -f dcf-cmd-testentrypoint -t entorypoint-test .
Sending build context to Docker daemon  44.54kB
Step 1/2 : FROM centos
 ---> 5d0da3dc9764
Step 2/2 : ENTRYPOINT ["ls","-a"]
 ---> Running in 230d3f68e0c3
Removing intermediate container 230d3f68e0c3
 ---> 3f8a92fb7b13
Successfully built 3f8a92fb7b13
Successfully tagged entorypoint-test:latest

2.3测试镜像

[root@docker ~]# docker run 3f8a92fb7b13
.
..
.dockerenv
bin
dev
etc
home
lib
lib64
lost+found
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var

2.4追加命令 -l 测试

[root@docker ~]# docker run 3f8a92fb7b13 -l
total 0
drwxr-xr-x.   1 root root   6 Oct  9 13:55 .
drwxr-xr-x.   1 root root   6 Oct  9 13:55 ..
-rwxr-xr-x.   1 root root   0 Oct  9 13:55 .dockerenv
lrwxrwxrwx.   1 root root   7 Nov  3  2020 bin -> usr/bin
drwxr-xr-x.   5 root root 340 Oct  9 13:55 dev
drwxr-xr-x.   1 root root  66 Oct  9 13:55 etc
drwxr-xr-x.   2 root root   6 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   6 Sep 15 14:17 lost+found
drwxr-xr-x.   2 root root   6 Nov  3  2020 media
drwxr-xr-x.   2 root root   6 Nov  3  2020 mnt
drwxr-xr-x.   2 root root   6 Nov  3  2020 opt
dr-xr-xr-x. 130 root root   0 Oct  9 13:55 proc
dr-xr-x---.   2 root root 162 Sep 15 14:17 root
drwxr-xr-x.  11 root root 163 Sep 15 14:17 run
lrwxrwxrwx.   1 root root   8 Nov  3  2020 sbin -> usr/sbin
drwxr-xr-x.   2 root root   6 Nov  3  2020 srv
dr-xr-xr-x.  13 root root   0 Oct  9 12:47 sys
drwxrwxrwt.   7 root root 171 Sep 15 14:17 tmp
drwxr-xr-x.  12 root root 144 Sep 15 14:17 usr
drwxr-xr-x.  20 root root 262 Sep 15 14:17 var
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值