Dockerfile里指定执行命令用ENTRYPOING和用CMD有何不同?
结论:运行时机不太一样。
RUN是在Build时运行的,先于CMD和ENTRYPOINT。Build完成了,RUN也运行完成后,再运行CMD或者ENTRYPOINT。
ENTRYPOINT和CMD的不同点在于执行docker run时参数传递方式,CMD指定的命令可以被docker run传递的命令覆盖,例如,如果用CMD指定:
...
CMD ["echo"]
然后运行
docker run CONTAINER_NAME echo foo
那么CMD里指定的echo会被新指定的echo覆盖,所以最终相当于运行echo foo
,所以最终打印出的结果就是:
foo
而ENTRYPOINT会把容器名后面的所有内容都当成参数传递给其指定的命令(不会对命令覆盖),比如:
...
ENTRYPOINT ["echo"]
然后运行
docker run CONTAINER_NAME echo foo
则CONTAINER_NAME后面的echo foo
都作为参数传递给ENTRYPOING里指定的echo命令了,所以相当于执行了
echo "echo foo"
最终打印出的结果就是:
echo foo
另外,在Dockerfile中,ENTRYPOINT指定的参数比运行docker run时指定的参数更靠前,比如:
...
ENTRYPOINT ["echo", "foo"]
执行
docker run CONTAINER_NAME bar
相当于执行了:
echo foo bar
打印出的结果就是:
foo bar
Dockerfile中只能指定一个ENTRYPOINT,如果指定了很多,只有最后一个有效。
执行docker run命令时,也可以添加-entrypoint参数,会把指定的参数继续传递给ENTRYPOINT,例如:
...
ENTRYPOINT ["echo","foo"]
然后执行:
docker run CONTAINER_NAME bar #注意没有echo
那么,就相当于执行了echo foo bar
,最终结果就是
foo bar
Dockerfile里指定执行命令用ENTRYPOING和用CMD有何不同?的更多相关文章
- docker Dockerfile里使用的命令说明
一,dockerfile格式 注释# 指令 参数 指令不区分大小写,但是推荐全部大写指令. 指令从上到下顺序被执行 第一个指令必须是[FROM],指示出要使用的基础镜像. 执行docker file时 ...
- C#程序调用CMD执行命令,将参数传递给cmd.exe
proc.StartInfo.Arguments = "/c ping 10.2.2.125"; C#程序调用CMD执行命令 将参数传递给cmd.exe的(Passing an a ...
- paramiko模拟ansible远程执行命令
主模块 #!/usr/bin/env python from multiprocessing import Process import paramiko import time import sys ...
- Shell下通过echo+telnet在远端执行命令
创建脚本cmd.sh,用于输入telnet的用户与密码,以及生成远端需要执行的命令 执行命令 MY_SIGN=/tmp/sign; (sh cmd.sh ) | (telnet localhost ...
- WORKDIR 指定工作目录 每一个 RUN 都是启动一个容器、执行命令、然后提交存储层文件变更
WORKDIR 指定工作目录 格式为 WORKDIR <工作目录路径>. 使用 WORKDIR 指令可以来指定工作目录(或者称为当前目录),以后各层的当前目录就被改为指定的目录,如该目录不 ...
- 将命令行提示符里的执行结果导出到text文件中
为便于查看和保存命令行提示符里的执行结果, 可以使用 ">" 将执行结果导入到指定.txt文件中. 例如: 在命令行提示符里查看C盘文件,并将结果导入到E盘dir-c-out ...
- at在指定的时间执行命令+atq列出用户待处理作业(jobs)
按下crtl+d取消定时任务 # at now+1hourat> echo"a">aat> <EOF>at> <EOT>job 4 ...
- expect脚本同步文件 expect脚本指定host和要同步的文件 构建文件分发系统 批量远程执行命令
自动同步文件 #!/usr/bin/expect set " spawn rsync -av root@.txt /tmp/ expect { "yes/no" { se ...
- expect脚本同步文件、expect脚本指定host和要同步的文件、构建文件分发系统、批量远程执行命令
7月20日任务 20.31 expect脚本同步文件20.32 expect脚本指定host和要同步的文件20.33 构建文件分发系统20.34 批量远程执行命令扩展:shell多线程 http:// ...
随机推荐
- unity 脚本说明
MonoBehavour void OnEnable(){ //OnEnable执行在Wake和之前 } void Awake(){ // } void Start(){ } void OnEnabl ...
- linux 协议栈tcp的rst报文中,seq的选取问题
之前在<深入理解并行编程>的群里,有个小米的兄弟问了一个问题,服务器A发包给服务器B,Seq是1,但是在未能收到服务器B的报文回复的情况下,发送了rst,但是rst报文中,对应的seq是1 ...
- Shoulda, Woulda, Coulda
Shoulda, Woulda, Coulda Share Tweet Share Tagged With: Should-Would-Could, Words that Begin with H R ...
- PHP多例模式介绍_PHP教程
1.多例类可以有多个实例2.多例类必须能够自我创建并管理自己的实例,并向外界提供自己的实例. 大家都知道PHP单例模式,却很少说PHP多例模式,下面是在wikipedia上看到的PHP多例模式的例子: ...
- Shell编程常用函数
1.打印提示消息函数,不同级别消息使用不同的颜色显示.其中错误信息提示为红色字体. # -------------------------------------------------------- ...
- easyui分页,根据网友的一段代码优化了一下
千言万语尽在代码中,可以自己看,不清楚留言吧! <%@ Page Language="C#" AutoEventWireup="true" CodeBeh ...
- C# Excel导数据
遇到的几个坑,记录一下. 隐藏表,隐藏行,隐藏列, 单元格合并 => 拆分并填充内容, 显示隐藏列,结果那个列 还是不显示出来,拖动旁边的列也不显示. 结果在旁边的列上,按左右箭头键就出来了,也 ...
- js教程
http://study.163.com/course/courseLearn.htm?courseId=1076006#/learn/video?lessonId=1290547&cours ...
- kotlin string
Kotlin String split 操作实践 内容 此文章展示kotlin中对String字符串的split操作,如果你有遇到这方面的需求,希望对你有用. 1. split + 正则 先看下系 ...
- opencv批量读取图片
#include<opencv2/opencv.hpp>using namespace cv;using namespace std;int main(){ int num=4;// ...