【发布时间】:2018-04-17 20:27:44
【问题描述】:
我正在使用 Lua API 编写将在 HAproxy 内部运行的 lua 脚本。
我的脚本正在使用我想在我的机器上安装的socket 包。
目前我在 docker 中运行,我的 dockerfile 看起来像这样:
FROM haproxy:1.7
RUN apt-get update -y && apt-get install curl luarocks -y
RUN luarocks install luasocket
EXPOSE 80 9000
COPY 500error.json.http /etc/haproxy/errorfiles/
COPY hello_world.lua /etc/haproxy/scripts/
我的脚本有下一行:
local http = require('socket.http')
在运行 lua 解释器时可以正常工作,但在运行 haproxy 时不行:
[ALERT] 298/104833 (8) : parsing [/usr/local/etc/haproxy/haproxy.cfg:5] : lua runtime error: /etc/haproxy/scripts/hello_world.lua:1: module 'socket.http' not found:
我应该如何将它正确加载到 haproxy?
【问题讨论】:
-
虽然这不是错误的原因,但您随后可能会发现您无法将
socket.http与 HAProxy 一起使用,如果它执行任何阻塞操作。我已经有一段时间没有使用 HAProxy 进行任何密集的 Lua 编程了,但我记得“手动”执行远程 HTTP 请求,使用 HAProxy 的内置 Lua 套接字功能发送由我的代码构建的原始 HTTP 请求,并使用正则表达式解析响应,并且我不得不使用硬编码的 IP 地址,因为我没有异步 DNS 功能。 YMMV。