Docker: 精通ENTRYPOINT指令
来源:互联网 发布:逆战弹道优化 编辑:程序博客网 时间:2024/05/18 22:42
ENTRYPOINT简介:
docker run命令行中指定的任何参数都会被当做参数再次传递给ENTRYPOINT指令中指定的命令。
一个Dockerfile中只能有一个ENTRYPOINT命令。如果有多条,只有最后一条有效。
无参的方式:
ENTRYPOINT [“/usr/sbin/nginx"]
指定参数的方式:
ENTRYPOINT [“/usr/sbin/nginx”, “-g”, “deamon off"]
docker run 的--entrypoint 标志可以覆盖原Dockerfile中的ENTRYPOINT 指令。
分割线:
ENTRYPOINT的两种写法:
- docker exec的形式
ENTRYPOINT [“executable”,”param1”,”param2"]
任何docker run设置的命令参数或者CMD指令的命令,都将作为ENTRYPOINT 指令的命令参数,追加到ENTRYPOINT指令之后。
- shell的形式
ENTRYPOINT command param1 param2
这种格式禁止追加任何参数,即CMD指令或docker run后面的参数都将被忽略。采用shell格式,在容器中执行时,自动调用shell。
分割线:
CMD与ENTRYPOINT的关系:
- CMD可以为ENTRYPOINT提供参数,ENTRYPOINT本身也可以包含参数,但是可以把需要变动的参数写到CMD里面,而不需要变动的参数写到ENTRYPOINT里面;
- ENTRYPOINT使用第二种shell方式会屏蔽掉CMD里面的命令参数和docker run后面加的命令。
- 在Dockerfile中,ENTRYPOINT指定的参数比运行docker run时指定的参数更靠前。
...
ENTRYPOINT ["echo", "foo"]
ENTRYPOINT ["echo", "foo"]
docker run CONTAINER_NAME bar
打印的结果是:
foo bar
- 在Dockerfile中,ENTRYPOINT和CMD至少必有其一。
分割线:
ENTRYPOINT/CMD最后一条命令为无限运行的命令:
这句话才是使用ENTRYPOINT的精髓。
在Docker Daemon模式下,entrypoint、cmd命令的最后一个命令,一定是要当前容器需要一直运行的,才能防止容器退出。
以下方式无效:
ENTRYPOINT service tomcat7 start #运行几秒钟之后,容器就会退出
CMD service tomcat7 start #运行几秒钟之后,容器就会退出
以下有效:
ENTRYPOINT service tomcat7 start && tail -f /var/lib/tomcat7/logs/catalina.out
# 或者
CMD service tomcat7 start && tail -f /var/lib/tomcat7/logs/catalina.out
以下也有效:
ENTRYPOINT ["/usr/sbin/sshd"]
CMD ["-D"]
注意点:
- ENTRYPOINT/CMD中不能把一个有限执行的命令加到一个无限执行的命令后面。这会导致后面的有限执行的命令无法执行。因为无限命令一直在执行,永远都无法执行结束,所以会导致后面的有限执行命令阻塞。
- ENTRYPOINT/CMD中最后的一个命令必须要是无限执行的命令。
- 比如在rabbitmq中:
第一个命令是无限执行的命令,不会主动退出。无论是rabbitmq-server还是rabbitmq-server&都是无限执行的命令,都不会主动退出。
第二个命令是有限执行的命令,执行完以后会主动退出;
rabbitmq-server
rabbitmq-plugins enable rabbitmq_management
阅读全文
1 0
- Docker: 精通ENTRYPOINT指令
- Docker镜像以及CMD与ENTRYPOINT指令的比较
- [k8s]args指令案例-彻底理解docker entrypoint
- [k8s]docker entrypoint图解
- Dockerfile创建自定义Docker镜像以及CMD与ENTRYPOINT指令的比较
- DOCKERFILE的CMD指令和ENTRYPOINT指令
- 【docker】CMD ENTRYPOINT 区别 终极解读!
- 论docker中 CMD 与 ENTRYPOINT 的区别
- 论docker中 CMD 与 ENTRYPOINT 的区别
- 论docker中 CMD 与 ENTRYPOINT 的区别
- 论docker中 CMD 与 ENTRYPOINT 的区别
- Docker中CMD与ENTRYPOINT的简明理解
- 论docker中 CMD 与 ENTRYPOINT 的区别
- Dockerfile文件中的CMD和ENTRYPOINT指令差异对比
- Dockerfile中的ENTRYPOINT和CMD指令详解与比较
- docker指令
- Docker 指令
- docker 一些指令
- CodeForces 830C Bamboo Partition
- SpringAOP整合Hibernate并使用事务(模拟买书的过程)
- kuangbin专题五 并查集 POJ2236-Wireless Network
- UE4 C++创建删除文件夹(对本地文件夹进行操作)
- shell
- Docker: 精通ENTRYPOINT指令
- 栈的基本操作
- 给你一台大疆无人机,你能用来做点啥?(三)------倾斜摄影建模基础
- Eclipse 创建一个项目 并使用 git 上传到 码云
- jQuery添加删除,全选反选,批量删除
- Tourism Planning (状态dp)
- C++11 for循环新用法、for_each 用法
- 接华为应用
- Linux MySQL-5.7安装(1)