纸上得来终觉浅,绝知此事要躬行。
1. 发现问题并不可怕,这是一种幸运哈!
- 今天早上部署服务的时候,发现自己管理的一台
CentOS7
的服务器上,在启动的容器的时候,无法通过supervisorctl
命令来查看服务状态。如下运行命令,提示如下错误。
root@abeab5622a8a:/opt/lessness# supervisorctl status
unix:///var/run/supervisor.sock refused connection
- 第一反应,是不是自己配置的
Supervisor
服务有问题,随即查看下配置,如下所示。通过详细的查看对应配置,并没有发现有哪里用不对的地方。没办法,只能求助于Google
和GitHub
了,看看其他人是否有遇到和我一样类似的情况。
root@abeab5611a8a:/opt/lessness# cat /etc/supervisor/supervisord.conf
; supervisor config file
[unix_http_server]
file=/var/run/supervisor.sock
chmod=0700
[supervisord]
logfile=/var/log/supervisor/supervisord.log
pidfile=/var/run/supervisord.pid
childlogdir=/var/log/supervisor
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
serverurl=unix:///var/run/supervisor.sock
[include]
files = /etc/supervisor/conf.d/*.conf
2. 解决问题的方法,还是需要注意的哈!
- 搜了半天,在
Supervisor
的GitHub
的issues
中,发现了如下几个链接。顺藤摸瓜,发现原来是因为docker
服务使用的驱动的原因。当时,我都在怀疑,是不是CentOS7
对docker
的支持有问题或者是需要更新docker
的版本。
# 查看操作系统使用docker存储驱动
[app@localhost ~]$ docker inspect app_demo_web | grep over
"Driver": "overlay",
"LowerDir": "/data/docker/overlay/798c9xxx43146/root",
"MergedDir": "/data/docker/overlay/71e4dxxx41eed/merged",
"UpperDir": "/data/docker/overlay/71e4dxxx41eed/upper",
"WorkDir": "/data/docker/overlay/71e4dxxx41eed/work"
"Name": "overlay"
# 当然可以通过如下方式查看
[app@localhost ~]$ docker info | grep "Storage Driver"
Storage Driver: overlay
- 临时的解决方式,就是在启动容器的时候,通过
-v
参数将本地的某个目录挂载到容器的/var/run/
即可。当然这个目录,需要根据Supervisor
的配置文件指定的位置做出对应的调整。
docker run -d --name=app_test \
-p 19999:19999 \
-v /data/run/:/var/run/ \
--cap-add SYS_PTRACE \
--security-opt apparmor=unconfined \
app/xxx
3. 将存储驱动程序切换从 overlay 到 overlay2 上
- 上面通过挂载的方式,只是一种临时的解决方法,而且比较麻烦不够方便。根本的解决方法,就是通过更换
docker
的底层的存储驱动程序,将其从overlay
转换到overlay2
上,就万事大吉。以下是,具体的方法。
# 1.stop docker service
$ sudo systemctl stop docker
# 2.backup docker config file
$ cp -au /var/lib/docker /var/lib/docker.bk
# 3.edit docker config
$ vim /etc/docker/daemon.json
{
"storage-driver": "overlay2"
}
# 4.start docker service
$ sudo systemctl start docker
# 5.verify the overlay2 storage driver
$ docker info
Containers: 0
Images: 0
Storage Driver: overlay2
Backing Filesystem: xfs
Supports d_type: true
Native Overlay Diff: true
<output truncated>