docker run 命令的选项
—attach , -a Attach to STDIN, STDOUT or STDERR
—detach , -d Run container in background and print container ID
—interactive , -i Keep STDIN open even if not attached
—tty , -t Allocate a pseudo-TTY
- 0: stdin0 :标准输入
- 1: stdout1 :标准输出
- 2: stderr2 :标准错误
其中-a 可以多次指定 ,比如 -a stdin -a stdout
docker的默认情况下:前台运行,stdout 和 stderr 转接出来,而stdin关了
-d=false, -i=false, -t=false
情况1: 当只指定-a stdin时容器会在前台运行,crtl+c也无法退出
情况2: 当只指定-a stdout时容器只会输出标注输出
情况3: 当只指定-a stderr时容器只会输出标注错误,正常输出不会显示到命令行

但不论如何设置-a参数,docker logs一直可以看到错误输出和标注输出

Dockerfile:
CMD
支持三种格式
CMD [“executable”,”param1”,”param2”] 使用 exec 执行,推荐方式;
CMD command param1 param2 在 /bin/sh 中执行,提供给需要交互的应用;
CMD [“param1”,”param2”] 提供给 ENTRYPOINT 的默认参数;
指定启动容器时执行的命令,每个 Dockerfile 只能有一条 CMD 命令。如果指定了多条命令,只有最后一条会被执行。
如果用户启动容器时候指定了运行的命令,则会覆盖掉 CMD 指定的命令。
ENTRYPOINT
两种格式:
ENTRYPOINT [“executable”, “param1”, “param2”]
ENTRYPOINT command param1 param2(shell中执行)。
配置容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖。
差异1:CMD指令指定的容器启动时命令可以被docker run指定的命令覆盖,而ENTRYPOINT指令指定的命令不能被覆盖,而是将docker run指定的参数当做ENTRYPOINT指定命令的参数。
差异2:CMD指令可以为ENTRYPOINT指令设置默认参数,而且可以被docker run指定的参数覆盖;
如果容器中配置了command,那么就使用容器中的command,参数args如果配置了则使用,如果没有配置,就不带参数执行command
如果容器中没有配置command,只是配置了args:使用Dockerfile中提供的命令,参数使用容器中配置的args
如果容器中command,args都没有配置:使用Dockerfile中的默认配置
