五、CMD 和 ENTRYPOINT的区别
转载CMD 和 ENTRYPOINT的区别
CMD #指定这个容器启动时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT #指定这个容器启动时候要运行的命令,可以追加命令
测试cmd
1.编写dockerfile文件
[root@docker dockerfile]# vim dockerfile-cmd-test
FROM centos
CMD ["ls","-a"]
2.构建镜像
[root@docker dockerfile]# docker build -f dockerfile-cmd-test -t cmdtest .
.............
Successfully built 509ea5f2ed84
3.run运行
[root@docker dockerfile]# docker run cmdtest
.
..
.dockerenv
bin
dev
etc
home
lib
lib64
lost+found
media
........................................
4.我们想追加一个命令-l ,ls -al
[root@docker dockerfile]# docker run cmdtest -l
docker: Error response from daemon: oci runtime error: exec: "-l": executable file not found in $PATH.
#cmd的情况下-l 替换了CMD ["ls","-a"]的命令,而-l不是命令所以报错
解决办法用CMD的情况下如果想要替换它怎么操作呢?如下:
[root@docker dockerfile]# docker run cmdtest ls -al
total 8
drwxr-xr-x 17 root root 248 Sep 24 03:33 .
drwxr-xr-x 17 root root 248 Sep 24 03:33 ..
-rwxr-xr-x 1 root root 0 Sep 24 03:33 .dockerenv
lrwxrwxrwx 1 root root 7 Nov 3 2020 bin -> usr/bin
drwxr-xr-x 5 root root 360 Sep 24 03:33 dev
drwxr-xr-x 55 root root 4096 Sep 24 03:33 etc
.......
注我们需要一个完整的路径来替换,比较麻烦
2.测试ENTRYPOINT
1.编写dockerfile文件
[root@docker dockerfile]# vim dockerfile-entrypoint-test
FROM centos
ENTRYPOINT ["ls","-a"]
2.构建镜像
[root@docker dockerfile]# docker build -f dockerfile-entrypoint-test -t entrypoint .
3.启动镜像
[root@docker dockerfile]# docker run -it entrypoint
. .dockerenv dev home lib64 media opt root sbin sys usr
.. bin etc lib lost+found mnt proc run srv tmp var
4.运用cmd下面会报错,运用ENTRYPOINT我们的追加命令会直接拼接在ENTRYPOINT命令后面
[root@docker dockerfile]# docker run -it entrypoint -l
total 8
drwxr-xr-x 17 root root 248 Sep 24 06:35 .
drwxr-xr-x 17 root root 248 Sep 24 06:35 ..
-rwxr-xr-x 1 root root 0 Sep 24 06:35 .dockerenv
lrwxrwxrwx 1 root root 7 Nov 3 2020 bin -> usr/bin
drwxr-xr-x 5 root root 380 Sep 24 06:35 dev
drwxr-xr-x 55 root root 4096 Sep 24 06:35 etc
drwxr-xr-x 2 root root 6 Nov 3 2020 ho
注:docker中很多命令都十分 相似,我们需要了解他们的区别。
本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Dockerfile中 CMD和ENTRYPOINT的区别
命令如果指定了参数会把CMD里的参数覆盖: (这里说明一下,如:docker run -it ubuntu /bin/bash 命令的参数是指/bin/bas
kubernetes docker bash 可执行文件 -
Dockfile里的CMD和ENTRYPOINT的区别
Dockfile里的CMD和ENTRYPOINT的区别
Dockerfile CMD ENTRYPOINT -
dockerfile ENTRYPOINT 和CMD的区别docker run cmd entrypoint的区别
命令是 docker run -i
docker linux 运维 命令行参数 centos