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
本文通过实例演示了Docker中CMD和ENTRYPOINT命令的使用及它们的区别。CMD命令在不追加参数时生效,追加参数会替换原有命令;而ENTRYPOINT命令始终保持不变,追加参数作为参数传递给它。测试结果显示,当使用CMD时,-l追加命令导致错误,而ls-al追加命令正常执行列出文件;对于ENTRYPOINT,追加的-l和ls-al都能正确与ENTRYPOINT命令结合,展示文件列表。

被折叠的 条评论
为什么被折叠?



