自己开发一个容器,有多个应用在其中,为保证服务可用,用supervisord来做进程管理,部署时碰到一个问题:容器打包好后,导入服务器使用,但docker提示容器意外退出,无法正常运行,查看运行日志,有如下信息。
2022-6-11 06:14:27,564 INFO exited: x11vnc (exit status 127; not expected)
2022-6-11 06:14:28,568 INFO gave up: x11vnc entered FATAL state, too many start retries too quickly
进入容器中,运行x11vnc -display :1 命令,显示能够稳定进入运行状态,为什么在supervisord的管理下却无法运行,尝试了很多方法均无法解决。
在学习过程,看到有的人讲到supervisord管理的要求,得到启发,很可能是运行命令需要的用户身份引起的。
原配置文件:
[program:x11vnc]
priority=20
command=x11vnc -display :1 -rfbauth /password
修改如下:
[program:x11vnc]
priority=20
command=x11vnc -display :1 -rfbauth /password
user=root
系统成功运行。
在构建容器时,在容器内部操作,都是以root帐户运行命令,而打包之后,x11vnc以守护方式在容器运行,其实各种组件能否以普通用户身份运行有不同的情况,这次x11vnc在新的容器中是不行的,但以前多次这样做却没有问题。