执行指令: docker run---- name centos8- d centos /诚心带/bash,检查docker ps上正在运行的容器,找不到centos8。
docker ps -a检查发现centos8容器已停止
[ root @ mi wifi-r4a-SRV server ] $ docker run-- name centos8- d centos /诚心诚意的发箍/bash
a 770630 ca 865 b 3c 3346 a 321 a 383 f 302 ed 22 af 9281 be 8482 F4 debc 59218 d 0d 1
[ root @ mi wifi-r4a-SRV server ] $ docker PS
containeridimagecommandcreatedstatusportsnames
[ root @ mi wifi-r4a-SRV server ] $ docker PS-a
containeridimagecommandcreatedstatusportsnames
a770630ca865 centos '/诚心诚意的发箍/bash'37secondsagoexited(0) 35 seconds ago centos8
为什么要退出?
这是因为docker在后台运行,需要前台进程。 docker执行的命令必须是挂起的命令(e.g. top,ping ),才能自动退出。 在上面的代码中,这是-d centos必须运行的指定命令。 如果命令执行完成或APP应用程序结束,容器将自动关闭。
解决方法
以以前的舞台流程的形式执行
运行的程序作为前台进程运行,如果容器需要同时启动多个进程,则可以将其中一个进程挂起到前台。
例如,在上述centos容器中,您只需要以交互方式更改启动命令以启动:
docker run---- name centos8- it centos /诚心乐队/bash
或Web容器:
service PHP5- fpmstartnginx-g ' daemon off;'
巧妙的安排
添加像tail top这样可以在前台运行的程序,继续输出log文件即可。
servicenginxstartservicephp5- fpmstarttail-f/var/log/nginx/error.log
以上述web容器为例,可以写为:
servicenginxstartservicephp5- fpmstarttail-f/var/log/nginx/error.log
自己写脚本
在启动centos/ubuntu容器时,可以创建一个死循环,并做手脚以继续进行任意输出。 这样,集装箱就不会以为无能为力而自杀。
docker run -d centos /诚心诚意的发箍/bash -c 'while true; do echo hello world; 步骤1; done '
补充知识:在docker中启动容器时CMD调用的sh脚本中if命令意外的符号if[[的解决方案]
最近在Dockerfile中创建镜像,CMD调用sh脚本start.sh启动容器,在docker run中启动容器时,启动失败,运行docker logs容器ID,以及意外的符号if
我成功地通过直接外部linux系统调用运行了start.sh。 在docker exec中进入容器,在容器中调用start.sh时没有报告错误,需要通过命令启动的所有程序都已成功启动。 直接运行脚本没有问题,但通过docker run报告错误很奇怪。
start.sh的错误代码段如下
if [ [-e/home/DC/test nn-AAA.zip ] ]; 陈真
rm -rf /home/testnn-aaa
unzip -q -o -d /home testnn-aaa.zip
echo 'unzip zip finished '
else
echo 'dc zip not exist '
fi
经过调查,我的start.sh中也有错误文件前面有if文件,但没有错误。 两个位置的区分对第一个if使用了单个[],将代码更改为[]后成功,并进行了以下修改:
if [ -e /home/dc/testnn-aaa.zip ]; 陈真
至此,在解析docker run或docker restart并启动镜像时,编辑人员共享的所有内容都会自动退出。 希望您能参考。 另外,请多关照褐家。