首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在默认的Dockerfile上重新加载haproxy.cfg?

如何在默认的Dockerfile上重新加载haproxy.cfg?
EN

Stack Overflow用户
提问于 2014-12-30 00:21:56
回答 2查看 10.1K关注 0票数 6

我使用的是来自https://github.com/dockerfile/haproxy的默认https://github.com/dockerfile/haproxy码头映像

不幸的是,我无法让它正确地重新加载我的配置。

如果我跑了

代码语言:javascript
复制
$ sudo docker exec haprox haproxy -f /etc/haproxy/haproxy.cfg -p '$(</var/run/haproxy.pid)' -st '$(</var/run/haproxy.pid)'

它只是将帮助文件转储出去。如果我跑了

代码语言:javascript
复制
$ sudo docker exec haprox 'haproxy -f /etc/haproxy/haproxy.cfg -p $(</var/run/haproxy.pid) -st $(</var/run/haproxy.pid)'

我得到了

代码语言:javascript
复制
2014/12/30 00:03:23 docker-exec: failed to exec: exec: "haproxy -f /etc/haproxy/haproxy.cfg -p $(</var/run/haproxy.pid) -st $(</var/run/haproxy.pid)": stat haproxy -f /etc/haproxy/haproxy.cfg -p $(</var/run/haproxy.pid) -st $(</var/run/haproxy.pid): no such file or directory

嘘。这些东西都不是我想要的。我可以运行docker exec haprox service haproxy reload --但这最终会产生几个haproxy进程,所以当我通过unix连接时,我从show stat获得了一组信息,但从http页面得到了一组完全不同的信息。

我试图设置它,以便能够对我们的遗留软件进行优雅的重新部署,但是它对Tomcat会话做了非常糟糕的事情,所以我唯一的选择是保持现有会话的活力,并点击同一台服务器。

代码语言:javascript
复制
backend legacy
    cookie SERVERID insert indirect preserve
    server A 123.0.0.123:8080 cookie A check
    server B 123.0.0.123:8080 cookie B check

就能做到这一点。我可以调用套接字并运行set weight legacy/A 0,它将耗尽服务器A的连接。

但是(还记得那个遗留的部分吗?)我得把我的服务器A/B集装箱放在头上,然后装上新的。我的系统设置很好,但是当我重新加载时.奇怪的事发生了。

如前所述,它最终产生了几个haproxy进程。我从stats页面和unix套接字获得不同的信息。在浏览器和套接字中与我通信的进程的pid文件似乎也不同。

最糟糕的是,它将停止使用503的http连接--使用ab进行测试将报告一些丢失的连接。这部分不行。

旧会话必须继续工作,直到旧服务器关闭/cookie被清除。似乎网络上的其他人能做我想做的事.我在这里做错什么了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-30 03:03:36

如果您按照下面的方式在容器中运行ps,您将看到链接的容器以pid 1的形式运行,它不能在不杀死容器的情况下被杀死,而且它也是在前台运行的,所以没有pid文件。如果要重新加载,请在容器中的后台运行make,并使其他一些进程(如主管)成为主进程。

代码语言:javascript
复制
docker exec -it haproxy ps aux 
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
haproxy      1  0.0  0.2  28988  4576 ?        Ss   02:41   0:00 haproxy -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid
票数 4
EN

Stack Overflow用户

发布于 2021-01-01 14:02:39

现在可以重新加载配置:

代码语言:javascript
复制
docker kill -s HUP haproxy_container_name

更多信息:/haproxy

我知道这是个老掉牙的问题,六年后也帮不上忙!:)但也许对某人有用!

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27697961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档