在Docker容器中,supervisor.sock拒绝连接。

11

docker容器中的supervisor.sock拒绝连接

我尝试通过supervisorctl unix:///var/run/supervisor.sock refused connectionOverlayfs does not work with unix domain sockets来解决它。

然而,在我的 debain 服务器上仍然无法正常工作。


这是我的 docker_supervisor.conf 文件

FROM python:2.7

RUN pip install supervisor

RUN mkdir /app
WORKDIR /app

COPY docker_supervisor.conf /app

RUN supervisord -c docker_supervisor.conf

CMD ["supervisorctl", "-c", "docker_supervisor.conf", "restart", "apiapp:"]

这是docker_supervisor.conf文件

[unix_http_server]
file=/var/run/docker_supervisor.sock
chown=root:root
chmod=0777

[supervisord]
logfile=/var/run/docker_supervisor.log
pidfile=/var/run/docker_supervisor.pid

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = 
supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=unix:///var/run/docker_supervisor.sock

[group:apiapp]
programs=api_web

[program:api_web]
user=root
directory=/app
command=python echo "OKOKOK"

sudo docker build --no-cache -t test .
Successfully built c3b4061fc9f7


sudo docker run -v $(pwd):/app test
unix:///var/run/docker_supervisor.sock refused connection

我尝试执行

sudo docker run --tmpfs /var/run -v $(pwd):/app test

但是它得到的结果是“unix:///var/run/docker_supervisor.sock拒绝连接”

如何修复并让supervisor在容器中运行?


1
你最终找到答案了吗?我也刚遇到了这个问题。 - EddieHR
1
{btsdaf} - thedouglenz
@Jolly - 我也遇到了同样的问题?你解决了这个问题吗?如果有解决方案,能否请您发布一下。 - intechops6
2个回答

2

同时也值得检查一下supervisor是否正在运行

supervisord

运行此命令将尝试启动supervisor,如果它已经在运行,则会抛出错误。对我来说,总是一个过时的连接导致了supervisor的崩溃。


1
谢谢 @Luke Madhanga :) 我运行了 supervisord 命令,并显示套接字已经被废弃,它还自动重新链接并更新了套接字文件,这解决了我的问题。 - kta

2

我遇到了同样的问题,并通过将套接字文件路径更改为/dev/shm/supervisor.sock来解决它。

supervisord.conf文件现在看起来像这样:

[unix_http_server]
file=/dev/shm/supervisor.sock                 ; <-- change it here
chmod=0700

[supervisord]
nodaemon=true                                 ; <-- add nodaemon for Docker
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:///dev/shm/supervisor.sock     ; <-- and change it here too

[program:app]
...

注意:建议使用带有-c参数的supervisorctl,以确保它读取正确的配置文件。否则,它可能会回退到默认配置文件之一,并尝试使用默认套接字文件/var/run/supervisor.sock进行连接,但这将不起作用。 编辑 - 添加了更多需要注意的事项
注意2:在使用客户端之前,请确保Supervisor服务器正在运行。
# Start server
supervisord -c /path/to/supervisor.conf
# Then use client
supervisorctl -c /path/to/supervisor.conf status

注意3:确保套接字文件存在。如果不存在,您可以像这样创建它(参考):

python -c "import socket as s; sock = s.socket(s.AF_UNIX); sock.bind('/dev/shm/supervisor.sock')"

注意事项4:请记住,也可以使用TCP而不是Unix套接字文件。
[inet_http_server]
port = 127.0.0.1:9001

[supervisorctl]
serverurl = http://127.0.0.1:9001

; Rest of the supervisor.conf file...

参考资料:


将supervisorctl的URL更改为“/dev/shm/supervisor.sock”后仍然无法工作。 - Nithish

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接