我尝试通过 supervisorctl unix:///var/run/supervisor.sock 拒绝连接 和 Overlayfs 不适用于 unix 域套接字
来修复它但是,它在我的 debain 服务器上仍然不起作用。
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:"]
[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拒绝连接”
我刚刚遇到了同样的问题,并通过将套接字文件路径更改为
/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]
...
注意:建议将
supervisorctl
与 -c
参数一起使用,以确保它读取正确的配置文件。否则,它可能会回退到默认文件之一并尝试使用默认套接字文件/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:确保socket文件存在。如果没有,您可以创建它,例如,像这样(reference):
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...
参考资料:
还值得检查主管是否确实正在运行
supervisord
运行此命令将尝试启动管理程序,如果它已经在运行,则会抛出错误。对我来说,总是一个陈旧的连接破坏了主管
当我尝试使用supervisorctl重新启动工作台时,我尝试了很多方法来解决这个问题,它说
unix:///var/run/supervisor.sock
拒绝连接
我通过将 chmod=0777 添加到 [supervisorctl] 来解决,如下所示
[supervisorctl]
serverurl=unix:///var/run/supervisor.sock chmod=0777
现在它对我有用,只是为了帮助任何遇到同样问题的人。 谢谢你