您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
解决docker单镜像实现多服务后-it阻塞问题
发布时间:2023-02-19 13:46:51编辑:雪饮阅读()
之前使用DockerFile创建了nginx+php于一个新的独立的镜像,而不是两个镜像。
当时是在entrypoint上面利用循环sleep的方式实现容器不会自动关闭的。
但后来发现正常-d运行时候确实没有问题,但如果是-it运行的时候是永远无法打开tty交互终端的。
那么实际上这种原因比较复杂,我的理解是之前那个脚本相当于死循环程序,那个程序没有在后台运行,所以-it时候就把即将要打开的新的shell会话阻塞了
所以镜像内部的脚本应如
[root@03901714f687 www.qingsongjituan.com]# cat /start.sh
#!/bin/bash
/www/server/php/56/sbin/php-fpm &
/usr/local/nginx/sbin/nginx &
while [ "true" = "true" ]
do
sleep 1
done
这里需要主要的是这个php-fpm和nginx都运行在后台,最后的while循环与sleep的结合是运行在前台的
这个脚本总结就是说可以有n个后台执行的任务,但只能有一个运行在前台的任务,当然这里运行在前台的这个任务是为了防止服务中断。
这里需要注意的是,有些资料说是脚本里面命令前面要加一个sh,我尝试了,在我这里不行,如果直接在容器内部执行就会报一个类似大概的意思是不能执行一个二进制文件
可能是与所处环境有关吧。
那么还有另外一个就是在docker built新镜像所使用的DockerFile
[root@k8s-master01 qsgw]# cat DockerFile
FROM bt2.3.1
cmd sh /start.sh
这里可以看到也使用了sh在脚本前面,这里我觉得就是解决那个使用-it运行时候创建新的tty终端被阻塞的问题的。
sh我的理解就是相当于对于上面那个启动脚本单独开启一个shell会话,而不是像之前一样直接不用sh,则可能就是阻塞了主会话了。我这里自己理解为相当于开启一个子线程吧,类似这样的效果。
关键字词:解决,docker,单,镜像,实现,多,服务,it,阻塞,问题
上一篇:tol24.com06-3
下一篇:tol24.com06-4