Docker无法使用Supervisor


纸上得来终觉浅,绝知此事要躬行。

Docker无法使用Supervisor


1. 发现问题并不可怕,这是一种幸运哈!

  • 今天早上部署服务的时候,发现自己管理的一台 CentOS7 的服务器上,在启动的容器的时候,无法通过 supervisorctl 命令来查看服务状态。如下运行命令,提示如下错误。
root@abeab5622a8a:/opt/lessness# supervisorctl status
unix:///var/run/supervisor.sock refused connection
  • 第一反应,是不是自己配置的 Supervisor 服务有问题,随即查看下配置,如下所示。通过详细的查看对应配置,并没有发现有哪里用不对的地方。没办法,只能求助于 GoogleGitHub 了,看看其他人是否有遇到和我一样类似的情况。
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. 解决问题的方法,还是需要注意的哈!

# 查看操作系统使用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>

文章作者: Escape
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Escape !